You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:28:24