You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者권규리

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:12:55