C++中实现学生唯一ID校验及板球得分录入的问题咨询
学生ID唯一性校验与得分限制的C++实现
需求说明
- 存储11名学生的ID及其板球比赛得分
- 得分必须大于10
- 学生ID必须唯一,输入重复ID时需提示“该ID已存在,请输入不同值”并重新输入
原代码问题分析
原代码的重复ID判断逻辑存在明显错误:
- 内层循环
j从i开始,导致刚输入的id[i]会和自身比较,直接触发重复提示 - 仅在第一次检测到重复时重新输入一次,没有循环校验直到输入唯一ID
- 数组大小只定义了5,不符合存储11名学生数据的需求
修正后的代码
#include <iostream> using namespace std; int main() { // 调整数组大小为11,匹配11名学生的存储需求 int id[11]; int run[11]; for (int i = 0; i < 11; i++) { // 循环获取ID,直到输入唯一值 bool isDuplicate; do { isDuplicate = false; cout << "请输入第" << i+1 << "名学生的ID:" << endl; cin >> id[i]; // 仅对比之前已输入的ID,避免和自身重复判断 for (int j = 0; j < i; j++) { if (id[i] == id[j]) { cout << "该ID已存在,请输入不同值!" << endl; isDuplicate = true; break; } } } while (isDuplicate); // 循环获取得分,直到输入符合要求的值 cout << "请输入该学生的比赛得分:" << endl; do { cout << "得分必须大于10,请重新输入:" << endl; cin >> run[i]; } while (run[i] <= 10); } // 可选:输出所有学生数据,验证正确性 cout << "\n所有学生数据如下:" << endl; for (int i = 0; i < 11; i++) { cout << "学生" << i+1 << ":ID=" << id[i] << ",得分=" << run[i] << endl; } system("pause"); return 0; }
关键修正点
- 将数组大小从5改为11,满足11名学生的数据存储需求
- 用
do-while循环包裹ID输入逻辑,确保重复时持续提示直到输入唯一ID - 检查重复时仅对比之前已输入的ID(
j从0到i-1),避免无效的自身对比 - 修正得分判断条件为
run[i] <= 10,严格符合“得分大于10”的要求 - 优化提示语,更清晰直观
内容的提问来源于stack exchange,提问作者zain momin
相关产品推荐
相关产品推荐

