C语言编写的乘法运算的程序为什么结果显示不对

来源:百度知道 编辑:UC知道 时间:2024/06/08 08:29:14
源程序
#include"stdio.h"
void main()
{
long int a,b,wangpan;
scanf("%d%d",&a,&b);
wangpan=a*b;
printf("wangpan is %ld\n",wangpan);
}
运算结果

第一个就是源程序的 -11293
第二个是改成LONG INT -11293
第三个是改成LONG INT 和 %ld -1112353821
第四个是只改成%ld 的 55890915
输入的数据为 147 369
图片没能弄过来
源程序为
#include"stdio.h"
void main()
{
int a,b,wangpan;
scanf("%d%d",&a,&b);
wangpan=a*b;
printf("wangpan is %ld\n",wangpan);
}
上面是改过以后的 不好意思啊

错误很明显了,不应该用长整形输出,理由:长整型是4个字节的,整型是2个字节的,你输入的值是147*369<65535 所以在2个字节范围内,用长整型输出,势必高位的2个字节内容是不必要的

另外为什么printf("wangpan is %d\n",wangpan);是负的呢?因为%d是有符号的整型,它的最高位是符号位造成的

修改方法:改为printf("wangpan is %u\n",wangpan);就行了

我没有明白你要问的问题是什么,不过我用VC6.0编译了一下,按照你给出的数据,运算结果为:
wangpan is 54243

首先没有输入事例很难判断.
第二大部分是用long或者int的单一定义的,而且只是少数见过用long long定义的.

能正确输入输出,如果你把那个scanf语句改成scanf("%ld%ld",&a,&b);就更好了,我用的编译器是Mingw2.95。
我的QQ235931068,不懂得问我。

scanf("%d""%d",&a,&b);
printf("wangpan is %d\n",wangpan);
这样看看行不

我猜是scanf("%d%d",&a,&b); 和输入的格式不一致,具体要看你输入的情况了,你把"%d%d"改成"%d,%d"或者"%d %d"看看