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

如何解决do-while循环无限问题,实现重复请求用户输入1-4的数字

解决do-while循环无限重复输入的问题

你的代码陷入无限循环的核心原因是:仅在循环启动前读取了一次用户输入,当输入不符合1-4的条件时,循环体内没有重新读取新的输入值,num会一直保持初始的错误值,导致while的判断条件永远为真,循环无法终止。

修正后的代码

int num;
do
{
    cin >> num; // 每次循环都读取用户的新输入
    if (num >= 1 && num <= 4)
    {
        cout << "Correct\n";
    }
    else
    {
        cout << "Incorrect. Try Again\n";
    }
} while (num < 1 || num > 4);

关键修改说明

  • 将cin >> num移至do-while循环内部,确保每次循环迭代都会获取用户的最新输入,更新num的值。
  • 简化条件判断逻辑:用范围判断num >=1 && num <=4替代多个||的等值判断,循环终止条件也简化为num <1 || num>4,代码更简洁易维护。
  • 移除了循环前的单独输入语句,避免重复代码,同时让第一次输入也纳入循环的统一处理流程。

可选优化:处理非数字输入

如果需要兼容用户输入非数字(如字母、符号)的场景,避免cin进入错误状态导致后续输入失效,可以添加错误处理逻辑:

#include <limits> // 需要包含头文件处理输入缓冲区

int num;
do
{
    // 处理非数字输入的情况
    while (!(cin >> num)) {
        cin.clear(); // 清除cin的错误标志位
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空缓冲区的无效内容
        cout << "Invalid input. Please enter a number: ";
    }

    if (num >= 1 && num <= 4)
    {
        cout << "Correct\n";
    }
    else
    {
        cout << "Incorrect. Try Again\n";
    }
} while (num < 1 || num > 4);

内容的提问来源于stack exchange,提问作者chargerstorm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:02:20