为何我的do-while循环仅执行一次迭代就退出?
解决do-while循环仅执行一次就退出的问题
你的代码里有两个关键问题导致循环只执行一次就退出:
1. 错误的break语句(含语法错误)
你在do-while循环里写了break:——首先这是语法错误(正确写法是break;),其次不管输入是否符合要求,这个break都会直接终止循环,完全起不到循环校验的作用。必须删掉这个break语句。
2. 初始输入的逻辑冗余且错误
你在循环前单独执行了一次scanf,但如果用户第一次输入就符合0-4的范围,代码还是会进入do-while循环执行错误提示,这显然不符合需求。更合理的做法是把输入逻辑整合到do-while里,避免重复代码。
修正后的代码
#include <stdio.h> int main() { int userNum; char tableOne[5] = { 'A', 'B', 'C', 'D', 'E' }; int tableTwo[5] = { 11, 12, 13, 14, 15 }; // 将输入与校验整合到do-while循环中 do { printf("Enter a whole number in the range of 0 to 4.\n"); scanf("%d", &userNum); // 仅当输入不符合要求时提示错误 if (userNum < 0 || userNum > 4) { printf("ERROR. ENTER WHOLE NUMBER \nIN THE RANGE OF 0 - 4 \nIN NUMERICAL FORMAT.\n"); } } while (userNum < 0 || userNum > 4); // 原if逻辑保留,也可改用switch简化 if (userNum == 0) { printf("%d", tableOne[0] + tableTwo[0]); } if (userNum == 1) { printf("%d", tableOne[1] + tableTwo[1]); } if (userNum == 2) { printf("%d", tableOne[2] + tableTwo[2]); } if (userNum == 3) { printf("%d", tableOne[3] + tableTwo[3]); } if (userNum == 4) { printf("%d", tableOne[4] + tableTwo[4]); } return 0; }
额外进阶提示
如果用户输入非数字(比如字母),scanf会读取失败,导致userNum值不确定,循环可能陷入死循环。可以添加逻辑处理这种情况:
// 替换原scanf行的处理逻辑 while (scanf("%d", &userNum) != 1) { // 清空输入缓冲区的无效数据 while (getchar() != '\n'); printf("ERROR. PLEASE ENTER A VALID NUMBER!\n"); }
内容的提问来源于stack exchange,提问作者Summer
相关产品推荐
相关产品推荐

