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

使用C++函数实现评分系统及Test #1输入输出异常问题求解

问题根因

你当前的代码硬编码了固定读取、处理、输出10条成绩的逻辑,当测试用例输入不足10条时,cin读取失败后剩余的数组元素会被默认赋值为0,最终就会输出多余的9条无效结果。

修改方案

调整逻辑为动态统计实际成功读取到的成绩数量,仅处理输出有效输入的结果,既可以满足单输入测试用例的要求,也兼容原始需求的10条输入场景,修改后的代码如下:

#include <iostream>
#include <array>
#include <iomanip>
char getLetterGrade(double);
using namespace std;
int main(){
    const int max_students = 10;
    array<double, max_students> grades;
    int actual_cnt = 0;
    // 读取输入直到失败或者达到10个的上限
    while(actual_cnt < max_students && cin >> grades[actual_cnt]) {
        actual_cnt++;
    }
    array<char, max_students> letters;
    for(size_t i = 0; i < actual_cnt; ++i) {
        letters[i] = getLetterGrade(grades[i]);
    }
    // 仅输出实际读取到的有效成绩结果
    for(size_t i = 0; i < actual_cnt; ++i) {
        cout << fixed << setprecision(2) << grades[i] << "=" << letters[i] << endl;
    }
    return 0;
}
char getLetterGrade(double grade){
    if(grade >= 95 && grade <=100) return 'A';
    if(grade > 89 && grade< 95) return 'B';
    if(grade > 84 && grade< 90) return 'C';
    if(grade > 79 && grade< 85) return 'D';
    if(grade > 75 && grade< 80) return 'E';
    if(grade > 40 && grade< 76) return 'F';
    return 'X';
}

核心修改点

  • 将固定10次的读取逻辑改为循环判断cin读取是否成功,同时统计实际输入的成绩数量actual_cnt
  • 后续的等级转换、结果输出逻辑都改为仅遍历actual_cnt个有效元素,不会输出未输入的无效成绩

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:57:01