求大神解答,一个很简单的C语言问题,谢谢了。

程序如下:
#include <stdio.h>
void main()
{
long int num,sum;
printf("please input the num:\n");
scanf("%d",&num);
if(num/10000==0)
{if(num/1000==0)
{if(num/100==0)
{if(num/10==0)
{if(num/1==0)
printf("the num is 0\n");
else
printf("the num is one-digit num\n");
sum=num;
}
else
printf("the num is two-digit num\n");
sum=(num/10)+(num%10);
}
else
printf("the num is three-digit num\n");
sum=(num/100)+((num/10)%10)+(num%10);
}
else
printf("the num is four-digit num\n");
sum=(num/1000)+((num/100)%10)+((num/10)%10)+(num%10);
}
else
printf("the num is five-digit num\n");
sum=(num/10000)+((num/1000)%10)+((num/100)%10)+((num/10)%10)+(num%10);
printf("sum=%d",sum);
}
可是当输入99999时,sum=20,这是怎么回事啊?求解答啊
显示如下:
please input the num:
99999
the num is five-digit num
sum=20

确实是45,我在g++上运行的结果是45。没错。追问

TC是20

追答

我不是在TC下用的,我是在QT里的g++,你可以试一下其它的编译器

追问

嗯,都说是编译器的问题,TC2.0

追答

终于给你做出来了,是你的代码有问题。你想输入长整型,但是你却是用的短整型输入。你定义的是long ,输入的却是int,所以你在一般的编译器里只能得到20的结果,我试过用你的代码不管是TC2还是TC++3.0都是一样的结果,但是我用的G++(4.4)用你的代码不改就能得到正确的结果。所以他们说是编译器的问题。如果你想用TC,和TC++3.0得到正确的结果就得把你的输入改一下,改为长整型输入。就是:scanf("%ld",&num);要在控制输入格式里加字母l,如果不加默认就是短整形输入,加了就是长整形输入。最后结果就是45
应该也是编译器不一样所以得出不一样的结果,
我测了一个TC,TC++默认情况int是占2个字节,也就是最大是32767,而G++默认是占4个字节,和long一样也是4个字节.不知道他们的编译器是不是一样。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-27
我敢说我的结果是45 你是不是输错了追问

没有啊,输入99999
输出sum=20

追答

不是吧 我的真是45~ hi聊?

追问

QQ吧,405150133

相似回答