C++成绩分级代码调试求助:入门编写遇困难,求修改方向
成绩等级划分代码的修改建议
核心问题与修改方向
1. Switch Case的贯穿问题
你的switch语句里,case 14、case 12、case 10、case 8这些分支都没有加break,导致代码会继续执行后续case的内容。比如输入95分,程序会先输出A+,接着又输出A,完全不符合预期。
- 修改:在每个独立的等级分支末尾添加
break,让程序执行完当前case后跳出switch结构。
2. 分数映射逻辑错误
当前scorecal = score / 10 + 5的计算逻辑完全匹配不上等级规则:
- 比如90分应该对应A,但计算后是
9 + 5 = 14,会走到case 14的A+分支; - 85分计算后是
8 +5=13,对应case13的A,而实际应该是B+。 - 修改:可以重新设计scorecal的计算方式,比如按5分一个区间划分,
scorecal = score /5,这样95-100对应19/20,90-94对应18,以此类推,再对应到switch的case;或者直接用更直观的if-else if链,逻辑更清晰,适合入门阶段理解。
3. 缺少输入合法性校验
代码没有判断用户输入的分数是否在0-100之间,如果输入负数、大于100的数或者非数字,程序会输出错误的等级(比如输入105会输出F),不符合实际需求。
- 修改:添加输入判断,当分数不在0-100范围内时,提示用户输入合法分数并退出程序。
4. 代码冗余
每个case里都重复写了输出语句,代码显得啰嗦。
- 修改:把输出语句移到switch结构外面,统一输出一次即可。
修正后的代码示例
方案1:修正Switch逻辑版本
#include<iostream> using namespace std; int main() { int score; string grade; cout << "Enter a score between 0 and 100 : "; cin >> score; // 输入合法性校验 if (score < 0 || score > 100) { cout << "Invalid score! Please enter a number between 0 and 100." << endl; return 1; // 非法输入,直接退出 } // 按5分区间划分计算scorecal int scorecal = score / 5; switch (scorecal) { case 19: // 95-100分 case 20: grade = "A+"; break; case 18: // 90-94分 grade = "A"; break; case 17: // 85-89分 grade = "B+"; break; case 16: // 80-84分 grade = "B"; break; case 15: // 75-79分 grade = "C+"; break; case 14: // 70-74分 grade = "C"; break; case 13: // 65-69分 grade = "D+"; break; case 12: // 60-64分 grade = "D"; break; default: // 0-59分 grade = "F"; break; } // 统一输出结果 cout << "Your grade is " << grade << endl; return 0; }
方案2:if-else if链版本(更适合入门理解)
#include<iostream> using namespace std; int main() { int score; string grade; cout << "Enter a score between 0 and 100 : "; cin >> score; // 输入合法性校验 if (score < 0 || score > 100) { cout << "Invalid score! Please enter a number between 0 and 100." << endl; return 1; } // 按分数区间直接判断等级 if (score >= 95) { grade = "A+"; } else if (score >= 90) { grade = "A"; } else if (score >= 85) { grade = "B+"; } else if (score >= 80) { grade = "B"; } else if (score >= 75) { grade = "C+"; } else if (score >= 70) { grade = "C"; } else if (score >= 65) { grade = "D+"; } else if (score >= 60) { grade = "D"; } else { grade = "F"; } cout << "Your grade is " << grade << endl; return 0; }
内容的提问来源于stack exchange,提问作者권규리
相关产品推荐
相关产品推荐

