C++ 如何实现输出程序中得分最高的球员信息
修改方案
你的原始代码核心问题是混淆了「最高得分值」和「得分最高球员的数组下标」两个概念:你把high变量同时用来存储得分值,又当做数组下标访问p[high],会直接导致访问到错误球员甚至数组越界崩溃。
具体修改步骤
- 拆分两个独立变量:一个存储最高得分值,一个专门存储得分最高球员在数组中的下标
- 增加边界判断,当传入的球员数组为空时直接返回,避免非法内存访问
- 循环中只要发现当前球员得分高于已记录的最高分,就同步更新最高得分和对应下标
- 修正输出语句的空格问题,避免输出内容粘连
修改后的完整代码
void showHighest(Player p[], int size) { // 边界判断:数组为空直接返回 if (size <= 0) { cout << "无有效球员数据" << endl; return; } // 初始默认第一个球员为得分最高 int highScore = p[0].points; int highIndex = 0; for (int counter = 1; counter < size; counter++) { if (p[counter].points > highScore) { highScore = p[counter].points; highIndex = counter; } } cout << "The player with the most points was: " << p[highIndex].name << " with " << highScore << " amount of points." << endl; }
逻辑说明
- 初始默认第一个球员为最高分,遍历从第二个元素开始即可,减少一次无意义比较
- 若存在多个球员同分最高,当前逻辑会返回第一个出现的最高分球员,如果需要返回所有同分最高球员,可以额外增加列表存储所有符合条件的下标即可
- 该逻辑兼容得分存在负数的场景,通用性更强
内容的提问来源于stack exchange,提问作者Tazader
相关产品推荐
相关产品推荐

