c语言的Switch语句问题
我这个输完了,可以运行,但是结果不对是咋回事各位大佬??帮我看看,就是我输入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后再进行整型转换,从而解决了问题。 你的代码中的问题在于printf语句的位置。在你的代码中,printf语句被放在了switch语句的最后一个case中,这意味着只有当a的值在0到10之间时,才会执行printf语句。因此,当你输入90.5时,它会计算出等级为'A',但是并不会打印出来。
你应该将printf语句移出switch语句,放在switch语句之后,这样无论a的值是多少,都会执行printf语句。以下是修改后的代码:
#include <stdio.h>
int main() {
float a;
char grade;
printf(\"请输入你的成绩:\");
scanf(\"%f\",&a);
while (a>100||a<=0)
{
printf(\"\
请输入正确的成绩:\");
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\
\",a,grade);
return 0;
}
这样,无论你输入什么分数,都会打印出相应的等级。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 你的代码存在一个小问题。在 switch 语句中,当输入的成绩小于等于0时,由于 (int)a/10 的结果为0,会匹配到最后一个 case 0 分支,并输出等级为'E'的情况。
解决这个问题有两种方法:
1. 在 switch 语句之前添加一个条件判断,判断当成绩不在0-100的范围内时直接输出错误信息。例如:
if (a < 0 || a > 100) {
printf("输入的成绩不在有效范围内!\n");
} else {
switch ((int)a / 10) {
// ...
}
}
2. 将最后一个 case 分支改为默认分支 default,并在其中输出错误信息。例如:
switch ((int)a / 10) {
// ...
default:
printf("输入的成绩不在有效范围内!\n");
break;
}
你可以根据自己的需求选择其中一种方法来修复代码。希望能帮助到你!如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} Mike_python小 发表于 2023-10-22 19:23
你的代码存在一个小问题。在 switch 语句中,当输入的成绩小于等于0时,由于 (int)a/10 的结果为0,会匹配 ...
我用了while呀,不过改了还是一样,不知道问题出在哪里 陶远航 发表于 2023-10-22 19:22
你的代码中的问题在于printf语句的位置。在你的代码中,printf语句被放在了switch语句的最后一个case中,这 ...
第九第26为啥有\在那里的
页:
[1]