使用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
相关产品推荐
相关产品推荐

