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

如何正确使用while循环?C++成绩计算程序循环问题排查优化

问题原因

  • 核心问题是代码执行顺序和循环范围设置错误:你把成绩录入、输入校验的全部逻辑都写在了do-while循环之外,只有成绩计算、评级输出、是否重试的逻辑在循环体内。第一次运行时程序会正常执行录入逻辑,进入循环后计算输出结果,用户输入y触发循环继续时,程序只会重新执行do{}包裹的代码,不会再执行外部的录入、校验逻辑,一直复用第一次输入的P1/P2/P3成绩重复计算,所以就会反复输出平均分相关内容。

优化方案

1. 核心逻辑调整

将「成绩录入 → 输入校验 → 计算评级」的完整业务逻辑全部放到do-while循环体内,保证用户选择重试时,会重新走一遍完整流程。

2. 其他细节优化

  • 重复的成绩录入、校验逻辑封装成独立函数,避免代码冗余
  • 多分支判断改用else if替代独立if,减少无效判断
  • 调用toupper需要引入<cctype>头文件,避免部分编译器报错
  • 多余的未使用变量直接删除,减少冗余代码

3. 简化后的完整代码

#include <iostream>
#include <string>
#include <cctype>
using std::cout, std::cin, std::string, std::endl;

// 封装成绩录入和校验逻辑
double input_grade(const string& tip) {
    double grade;
    cout << tip;
    cin >> grade;
    while (grade > 100 || grade <= 0) {
        cout << "Error! number should be in range of (1 to 100)." << endl;
        cout << "Re-enter " << tip.substr(6);
        cin >> grade;
    }
    return grade;
}

int main() {
    char again{};
    const string result_tip = "Your average grade is ";
    const string levels[] = {"Failed", "Study Harder", "Job well done", "Very good student", "Exceptional student"};
    do {
        double p1 = input_grade("Enter your P1 grade: ");
        double p2 = input_grade("Enter your P2 grade: ");
        double p3 = input_grade("Enter your P3 grade: ");
        cout << "\n";

        double result = p1 * 0.33 + p2 * 0.33 + p3 * 0.34;
        cout << result_tip << result << ", ";
        if (result <= 49) cout << levels[0] << endl;
        else if (result <= 70) cout << levels[1] << endl;
        else if (result <= 80) cout << levels[2] << endl;
        else if (result <= 90) cout << levels[3] << endl;
        else cout << levels[4] << endl;

        cout << "Would you like to average another set?(Y/N) ";
        cin >> again;
        cout << "\n";
    } while (toupper(again) == 'Y');
    return 0;
}

内容的提问来源于stack exchange,提问作者Kanra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:54:03