注:文章内容来源于网络,真实性有待确认,请自行甄别。
输入一同学成绩,判断其成绩等级?急!!如题,书上给出来的例子是:
发表于:2024-10-24 00:00:00浏览:7次
问题描述:如题,书上给出来的例子是:main(){floatscore;scanf("%f",&score);switch(score/10){case10:case9:printf("YourscoreisA\n");break;case8:printf("YourscoreisB\n");break;case7:printf("YourscoreisC\n");break;case6:printf("YourscoreisD\n");break; ("YourscoreisE\n");}}我用TC2.0运行没有问题。但用++6.0运行时老提示我:swit如题,书上给出来的例子是:main(){floatscore;scanf("%f",&score);switch(score/10){case10:case9:printf("YourscoreisA\n");break;case8:printf("YourscoreisB\n");break;case7:printf("YourscoreisC\n");break;case6:printf("YourscoreisD\n");break; ("YourscoreisE\n");}}我用TC2.0运行没有问题。但用++6.0运行时老提示我:switchexpressionnotintegral.我把float和%f改成int和%dVC++6.0才能正常编译。为什么会出现这种情况?还有,当我改成int型以后,我输入83.575.8这样的小数时,也能正常编译,怎么回事?请详细说明下~谢谢,抓住问题本质说明详细清楚的给予追加分数!问题补充:书上还说:switch语句中表达式可以为任意类型,但运算结果为整型。按这么说,即使score被定义为float型,score/10也会被运算为整型的啊?VC++中不是兼容C的所有语法规则吗?为什么用float型定义时,用TC2.0能正常编译而VC++6.0却报错呢?请补充下为什么两种编译系统会有这个差别?
在VC++6.0中switch语句的表达式只能为字符,整形。但不能为实型。而float是实型。
你可以强制把score转换成整形。
switch((int)score/10)
栏目分类全部>