带你学C带你飞第一季while语句课后动动手2求助
哪位大神可以帮忙看看为什么打印数额超出范围有bug{:10_266:}#include <stdio.h>
#include <math.h>
#define X int_max
#define N int_min
int main()
{
char ch;
int num=0,over=0;
long long int temp=0;
const int X=pow(2,31)-1;
const int N=-pow(2,31);
printf("请输入字符串:");
do{
ch=getchar();
if (ch>='0'&&ch<='9'){
temp=10*num+(ch-'0');
if (temp>X||temp<N){
over=1;break;
}
else num=temp;
}
else if (num) break;
}while (ch!='\n');
if (over){
printf("数额超出范围");
}
else if (!num&&!temp)
printf("无有效数额");
else
printf("结果为%d",num);
return 0;
} lz的输入是什么 迷雾少年 发表于 2019-8-12 15:21
lz的输入是什么
什么意思啊{:10_266:} Cyzyt 发表于 2019-8-13 10:38
什么意思啊
程序的输入,我输了一些好像没问题 迷雾少年 发表于 2019-8-13 10:39
程序的输入,我输了一些好像没问题
我会出现这种
请输入字符串:9999999999999
结果为1316134911
问题
请问是怎么回事呢 Cyzyt 发表于 2019-8-13 14:23
我会出现这种
请输入字符串:9999999999999
结果为1316134911
const int X = pow(2, 31) - 1;
const int N = -pow(2, 31);
你这里限定的范围是int变量负最大到正最大的值 你自己用计算器算下2^31-1是多少 你会发现你输入的999.....远比他大,懂我的意思吧 迷雾少年 发表于 2019-8-13 14:27
const int X = pow(2, 31) - 1;
const int N = -pow(2, 31);
所以应该输出数额超出范围才对啊 Cyzyt 发表于 2019-8-13 14:38
所以应该输出数额超出范围才对啊
因为你中间变量范围是int,你不断地*10+ch-'0' 他就会不断溢出的怎么也不会 不符合 temp>X || temp< N的 迷雾少年 发表于 2019-8-13 14:46
因为你中间变量范围是int,你不断地*10+ch-'0' 他就会不断溢出的怎么也不会 不符合 temp>X || temp< N的
什么叫溢出啊{:10_266:} Cyzyt 发表于 2019-8-13 14:50
什么叫溢出啊
就是你int范围 最大是2^32-1最小是-2^31 你中间变量temp是int变量 你无论怎么加他都不会超出他自身范围吧temp > X || temp < N,加多了超出的就没了。 迷雾少年 发表于 2019-8-13 14:52
就是你int范围 最大是2^32-1最小是-2^31 你中间变量temp是int变量 你无论怎么加他都不会超出他自身范围 ...
我的temp不是定义的long long int 吗{:10_291:} Cyzyt 发表于 2019-8-13 15:10
我的temp不是定义的long long int 吗
啊我知道了,是num 迷雾少年 发表于 2019-8-13 14:52
就是你int范围 最大是2^32-1最小是-2^31 你中间变量temp是int变量 你无论怎么加他都不会超出他自身范围 ...
谢谢大神{:10_298:} Cyzyt 发表于 2019-8-13 15:17
谢谢大神
okok{:10_256:}
页:
[1]