|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我这个输完了,可以运行,但是结果不对是咋回事各位大佬??
帮我看看,就是我输入90.5的话,它会打印出一个A,但是现在我输入什么它都不打印东西出来,也没有报错呀
- #include <stdio.h>
- int main()
- {
- float a;
- char grade;
- printf("请输入你的成绩:");
- scanf("%f",&a);
- while (a>100||a<=0)
- {
- printf("\n请输入正确的成绩:");
- scanf("%f",&a);
- }
- switch((int)a/10)
- { case 10:
- case 9:grade='A';break;
- case 8:grade='B';break;
- case 7:grade='C';break;
- case 6:grade='D';break;
- case 5:
- case 4:
- case 3:
- case 2:
- case 1:
- case 0:grade='E';
- printf("成绩是:%5.1f"",相对应的等级是%c\n。",a,grade);
- }
- return 0;
- }
复制代码
在这段代码中,问题出在了switch语句中的case部分。在C语言中,switch语句的case部分只能接受整型常量表达式作为条件,而不能接受浮点数类型的表达式。
解决这个问题的方法是将浮点数转换为整型,然后再进行switch语句的判断。可以使用强制类型转换将浮点数转换为整型,例如将 (int)a/10 改为 (int)(a/10) 。
以下是修改后的代码:
- #include <stdio.h>
- int main()
- {
- float a;
- char grade;
- printf("请输入你的成绩:");
- scanf("%f",&a);
- while (a>100||a<=0)
- {
- printf("\n请输入正确的成绩:");
- scanf("%f",&a);
- }
- switch((int)(a/10))
- {
- case 10:
- case 9: grade='A'; break;
- case 8: grade='B'; break;
- case 7: grade='C'; break;
- case 6: grade='D'; break;
- case 5:
- case 4:
- case 3:
- case 2:
- case 1:
- case 0: grade='E'; break;
- }
- printf("成绩是:%5.1f, 相对应的等级是%c。\n", a, grade);
- return 0;
- }
复制代码
通过将 (int)a/10 改为 (int)(a/10) ,可以确保将浮点数a除以10后再进行整型转换,从而解决了问题。
|
|