输入一同学成绩,判断其成绩等级?

来源:百度知道 编辑:UC知道 时间:2024/05/16 05:41:15
如题,书上给出来的例子是:
main()
{
float score;
scanf("%f",&score);
switch(score/10)
{
case 10:
case 9: printf("Your score is A\n");break;
case 8: printf("Your score is B\n");break;
case 7: printf("Your score is C\n");break;
case 6: printf("Your score is D\n");break;
default: printf("Your score is E\n");
}
}
我用TC2.0运行没有问题。但用VC++6.0运行时老提示我:
switch expression not integral.
我把float 和 %f 改成 int 和%d VC++6.0才能正常编译。
为什么会出现这种情况?
还有,当我改成int 型以后,我输入83.5 75.8这样的小数时,也能正常编译,怎么回事? 请详细说明下~谢谢,抓住问题本质说明详细清楚的 给予追加分数!
感谢各位回答:但是还有一点不明白~
书上还说: switch语句中表达式可以为任意类型,但运算结果为整型。按这么说,即使score被定义为float 型,score/10也会被运算为整型的啊?
VC++中不是兼容C的所有语法规则吗?为什么用float型定义时,用TC2.0能正常编译而VC++6.0却报错呢?请补充下为什么两种编译系统会有这个差别?

因为switch只能判断int/char类型,float类型当然不可以,但是你只要switch((int)(score/10))把这个值变成int类型就可以了。这个(int)的作用就是把float类型自动变成int类型,后面的小数会被去掉。

如果一开始你就定义score为int类型,就算你输入小数,还是会被自动去掉小数点后面的东西变成整数。

当然了,switch(X),这个X只能是整数,在VC里,你说的那个输入小数也能正常编译的问题,是因为它会自动截取整数部分,舍去所有小数部分
将float和%f改成int和%d后,switch()内就是整数了,所以能正常运行,你可以debug一下,就知道具体怎么一回事了,debug时查一下score的值,即使你输入的是float型的,这时score也是int型的