使用switch语句搭建学校评分系统遇故障,请求技术支持
问题修复与优化方案
代码中的致命错误
- 未定义变量:
switch(a)里使用了未声明的变量a,你定义的输入变量是num,把switch(a)改成switch(num)即可。 - 函数拼写错误:B等级分支里的
print("B");是错误的,C语言标准输出函数是printf,修正为printf("B");。
优化冗余的switch结构
你现在逐个分数写case的方式太繁琐,用区间判断可以大幅简化代码,以下是优化后的版本:
#include<stdio.h> int main() { int num; printf("Enter any number : "); scanf("%d", &num); // 先校验输入合法性 if(num < 0 || num > 100) { printf("Not valid\n"); return 0; } // 区间判断替代逐个case if(num <= 32) { printf("F\n"); } else if(num <= 39) { printf("D\n"); } else if(num <= 49) { printf("C\n"); } else if(num <= 59) { printf("B\n"); } else if(num <= 69) { printf("A-\n"); } else if(num <= 79) { printf("A\n"); } else { // 80-100区间 printf("A+\n"); } return 0; }
解决逐个输入耗时的问题
如果需要批量处理多个分数,可以改成循环输入模式,输入特定值(比如-1)停止:
#include<stdio.h> int main() { int num; printf("Enter scores (input -1 to exit): \n"); while(1) { scanf("%d", &num); if(num == -1) break; // 触发退出循环 if(num < 0 || num > 100) { printf("%d -> Not valid\n", num); continue; } if(num <= 32) { printf("%d -> F\n", num); } else if(num <= 39) { printf("%d -> D\n", num); } else if(num <= 49) { printf("%d -> C\n", num); } else if(num <= 59) { printf("%d -> B\n", num); } else if(num <= 69) { printf("%d -> A-\n", num); } else if(num <= 79) { printf("%d -> A\n", num); } else { printf("%d -> A+\n", num); } } return 0; }
编译提示
在Code::Blocks里编译时,红色的错误日志会直接指出问题位置,比如未定义变量、函数拼写错误这类问题,优先看编译报错信息能快速定位问题。
内容的提问来源于stack exchange,提问作者Khabib Nurmagomedhov
相关产品推荐
相关产品推荐

