鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 5

[已解决]c语言的Switch语句问题

[复制链接]
发表于 2023-10-22 19:22:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我这个输完了,可以运行,但是结果不对是咋回事各位大佬??
帮我看看,就是我输入90.5的话,它会打印出一个A,但是现在我输入什么它都不打印东西出来,也没有报错呀
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         float a;
  5.         char grade;
  6.         printf("请输入你的成绩:");
  7.         scanf("%f",&a);
  8.         while (a>100||a<=0)
  9.         {
  10.                 printf("\n请输入正确的成绩:");
  11.                 scanf("%f",&a);
  12.         }
  13.         switch((int)a/10)
  14.         {        case 10:
  15.                 case 9:grade='A';break;
  16.                 case 8:grade='B';break;
  17.                 case 7:grade='C';break;
  18.                 case 6:grade='D';break;
  19.                 case 5:
  20.                 case 4:
  21.                 case 3:
  22.                 case 2:
  23.                 case 1:
  24.                 case 0:grade='E';
  25.                 printf("成绩是:%5.1f"",相对应的等级是%c\n。",a,grade);
  26.         }
  27.                 return 0;
  28. }
复制代码
最佳答案
2023-10-22 19:22:22
在这段代码中,问题出在了switch语句中的case部分。在C语言中,switch语句的case部分只能接受整型常量表达式作为条件,而不能接受浮点数类型的表达式。

解决这个问题的方法是将浮点数转换为整型,然后再进行switch语句的判断。可以使用强制类型转换将浮点数转换为整型,例如将 (int)a/10 改为 (int)(a/10) 。

以下是修改后的代码:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float a;
  5.     char grade;
  6.     printf("请输入你的成绩:");
  7.     scanf("%f",&a);
  8.     while (a>100||a<=0)
  9.     {
  10.         printf("\n请输入正确的成绩:");
  11.         scanf("%f",&a);
  12.     }
  13.     switch((int)(a/10))
  14.     {
  15.         case 10:
  16.         case 9: grade='A'; break;
  17.         case 8: grade='B'; break;
  18.         case 7: grade='C'; break;
  19.         case 6: grade='D'; break;
  20.         case 5:
  21.         case 4:
  22.         case 3:
  23.         case 2:
  24.         case 1:
  25.         case 0: grade='E'; break;
  26.     }
  27.     printf("成绩是:%5.1f, 相对应的等级是%c。\n", a, grade);
  28.     return 0;
  29. }
复制代码


通过将 (int)a/10 改为 (int)(a/10) ,可以确保将浮点数a除以10后再进行整型转换,从而解决了问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-22 19:22:22 | 显示全部楼层    本楼为最佳答案   
在这段代码中,问题出在了switch语句中的case部分。在C语言中,switch语句的case部分只能接受整型常量表达式作为条件,而不能接受浮点数类型的表达式。

解决这个问题的方法是将浮点数转换为整型,然后再进行switch语句的判断。可以使用强制类型转换将浮点数转换为整型,例如将 (int)a/10 改为 (int)(a/10) 。

以下是修改后的代码:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float a;
  5.     char grade;
  6.     printf("请输入你的成绩:");
  7.     scanf("%f",&a);
  8.     while (a>100||a<=0)
  9.     {
  10.         printf("\n请输入正确的成绩:");
  11.         scanf("%f",&a);
  12.     }
  13.     switch((int)(a/10))
  14.     {
  15.         case 10:
  16.         case 9: grade='A'; break;
  17.         case 8: grade='B'; break;
  18.         case 7: grade='C'; break;
  19.         case 6: grade='D'; break;
  20.         case 5:
  21.         case 4:
  22.         case 3:
  23.         case 2:
  24.         case 1:
  25.         case 0: grade='E'; break;
  26.     }
  27.     printf("成绩是:%5.1f, 相对应的等级是%c。\n", a, grade);
  28.     return 0;
  29. }
复制代码


通过将 (int)a/10 改为 (int)(a/10) ,可以确保将浮点数a除以10后再进行整型转换,从而解决了问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-22 19:22:48 | 显示全部楼层
你的代码中的问题在于printf语句的位置。在你的代码中,printf语句被放在了switch语句的最后一个case中,这意味着只有当a的值在0到10之间时,才会执行printf语句。因此,当你输入90.5时,它会计算出等级为'A',但是并不会打印出来。

你应该将printf语句移出switch语句,放在switch语句之后,这样无论a的值是多少,都会执行printf语句。以下是修改后的代码:

  1. #include <stdio.h>  
  2. int main() {         
  3.     float a;         
  4.     char grade;         
  5.     printf("请输入你的成绩:");         
  6.     scanf("%f",&a);         
  7.     while (a>100||a<=0)         
  8.     {                  
  9.         printf("\
  10. 请输入正确的成绩:");                  
  11.         scanf("%f",&a);         
  12.     }         
  13.     switch((int)a/10)         
  14.     {   
  15.         case 10:         
  16.         case 9:grade='A';break;                  
  17.         case 8:grade='B';break;                  
  18.         case 7:grade='C';break;                  
  19.         case 6:grade='D';break;                  
  20.         case 5:         
  21.         case 4:         
  22.         case 3:         
  23.         case 2:         
  24.         case 1:         
  25.         case 0:grade='E';break;         
  26.     }
  27.     printf("成绩是:%5.1f,相对应的等级是%c\
  28. ",a,grade);
  29.     return 0;
  30. }
复制代码


这样,无论你输入什么分数,都会打印出相应的等级。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-22 19:23:22 | 显示全部楼层
你的代码存在一个小问题。在 switch 语句中,当输入的成绩小于等于0时,由于 (int)a/10 的结果为0,会匹配到最后一个 case 0 分支,并输出等级为'E'的情况。

解决这个问题有两种方法:

1. 在 switch 语句之前添加一个条件判断,判断当成绩不在0-100的范围内时直接输出错误信息。例如:
  1. if (a < 0 || a > 100) {
  2.     printf("输入的成绩不在有效范围内!\n");
  3. } else {
  4.     switch ((int)a / 10) {
  5.         // ...
  6.     }
  7. }
复制代码

2. 将最后一个 case 分支改为默认分支 default,并在其中输出错误信息。例如:
  1. switch ((int)a / 10) {
  2.     // ...
  3.     default:
  4.         printf("输入的成绩不在有效范围内!\n");
  5.         break;
  6. }
复制代码

你可以根据自己的需求选择其中一种方法来修复代码。希望能帮助到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-22 19:36:42 | 显示全部楼层
Mike_python小 发表于 2023-10-22 19:23
你的代码存在一个小问题。在 switch 语句中,当输入的成绩小于等于0时,由于 (int)a/10 的结果为0,会匹配 ...

我用了while呀,不过改了还是一样,不知道问题出在哪里
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-22 19:57:52 | 显示全部楼层
陶远航 发表于 2023-10-22 19:22
你的代码中的问题在于printf语句的位置。在你的代码中,printf语句被放在了switch语句的最后一个case中,这 ...

第九第26为啥有\在那里的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 12:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表