请高手帮忙看下这个为什么输出错误?(C)

来源:百度知道 编辑:UC知道 时间:2024/05/16 14:01:05
#include <stdio.h>

void main()
{
const float Revenue_per_150 = 4.5f;
short JanSold = 23500;
short FebSold = 19300;
short MarSold = 21600;
float RevQuarter = 0.0f;

long QuarterSold = JanSold + FebSold + MarSold;
printf("\nStock sold in\n Jan: %hd\n Feb: %hd\n Mar: %hd",
JanSold,FebSold,MarSold);
printf("\nTotal stock sold in first quarter: %ld",QuarterSold);
RevQuarter = QuarterSold / 150 * Revenue_per_150;
printf("\nSales revenue this quarter is:$%.2f\n",RevQuarter);
}

以上,输出Quarter是-1136,我试过把JanSold,FebSold,MarSold都声明为long时结果是正确的,不过还是不知道这个为什么不行...
对不起打错了,是输出QuarterSold为-1136

用楼主给出的源程序用TC2.0给出的结果如下:
Stock sold in
Jan:23500
Feb:19300
Mar:21600
Total stock sold in first quarter:-1136
Sales revenue this quarter is:$-31.50
Press any key to continue.
用楼主给出的源程序用VC++6.0给出的结果如下:
Stock sold in
Jan:23500
Feb:19300
Mar:21600
Total stock sold in first quarter:64400
Sales revenue this quarter is:$1930.50
Press any key to continue.

这是我亲自用楼主的程序原封不动的编译的结果,
但不知道为什么会出现这种差异? 有哪位好心人知道告诉下 谢谢!我的邮箱 cytdmm@163.com

因为类型问题你这里用的是long QuarterSold = JanSold + FebSold + MarSold;
在类型自动转换里只能重高级转向低级 不能有低级转向高级 也就是说只能从LONG 转向SHORT 而不能相反
你要把这里 long QuarterSold = JanSold + FebSold + MarSold; 的LONG 改成SHORT 而把上面的改成LONG 就没问题了 或者干脆就像你说的 把上面的全都改成LONG

这个程序是绝对正确的,可能是你的编译器有问题吧!!或者是你操作时出了点问题!!

lz我用VC++,没有问题啊