C语言case语句中错误提示语句的合理放置位置咨询
解决C语言替换球员时错误提示重复/不显示的问题
我来帮你搞定这个小问题!你遇到的情况很典型——要么错误提示根本不出来,要么每次循环不匹配就刷一遍提示,核心原因是错误提示的触发时机没找对。
问题根源分析
- 把提示放在循环前:还没遍历数组检查球员是否存在就直接输出,逻辑完全不对,自然不会在正确时机显示
- 把提示放在循环内的else分支:数组里每有一个不匹配的球员,就会输出一次提示,所以有多少个球员就会刷多少次,这显然不是你想要的
解决方案:用标志变量控制提示时机
咱们可以加一个「是否找到球员」的标志位,遍历数组时只处理匹配的情况,等整个数组都遍历完了,再根据标志位判断要不要输出错误提示。这样既不会漏提示,也不会重复输出。
修改后的代码如下:
//case r allows for a player to be replaced case 'r': printf("Enter a jersey number:\n"); int replace; scanf("%d", &replace); int found = 0; // 标志位,0表示未找到,1表示找到 for (int i = 0; i < numPlayers; ++i) { //if the user input matches a jersey in the array the user will input a new jersey number and rating if (replace == jerseyNumber[i]) { printf("Enter a new jersey number:\n"); scanf("%d", &jerseyNumber[i]); printf("Enter a rating for the player:\n"); scanf("%d", &playerRating[i]); found = 1; // 找到匹配球员,更新标志位 break; // 找到后就不用继续遍历了,直接跳出循环 } } // 遍历完所有球员后,判断是否找到 if (!found) { printf("Player not in roster\n"); } break; // 别忘了加上break跳出case分支,避免执行其他case
关键细节说明
- 标志位
found:初始设为0,找到匹配球员后立刻设为1,这样循环结束后就能知道有没有找到目标 break语句:找到匹配球员后跳出循环,不用继续遍历剩下的数组,提升效率- 错误提示放在循环外:只有当整个数组都遍历完且没找到匹配项时,才会输出一次错误提示,完美符合你的需求
内容的提问来源于stack exchange,提问作者CMOS_BATTERY
相关产品推荐
相关产品推荐

