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

C#接收8-12范围Int输入时While循环无限运行问题咨询

错误原因

你的代码将输入格式校验、数值区间校验拆成了两个独立的死循环,逻辑存在断层:

  • 第一个循环仅判断输入能否转为int类型,只要用户输入的内容是合法整数,无论数值是否落在8~12区间,都会直接跳出该循环
  • 第二个while(true)循环仅对已经拿到的固定numLength值做区间判断,一旦数值不在合法区间,循环内部既没有重新读取用户输入,也不会更新numLength变量的值,判断条件永远无法满足,就会无限打印错误提示进入死循环。
修正方案

将两类校验逻辑合并到同一个循环中,只要输入不满足「是合法整数」「数值在8~12区间」任意一个要求,就提示对应错误并重新等待用户输入,直到拿到完全符合要求的值再跳出循环。

如果需要区分不同错误类型给用户对应提示,推荐使用分步判断的写法,逻辑更清晰:

int numLength;
Console.WriteLine("Enter a number:");

while (true)
{
    string userInput = Console.ReadLine();
    // 校验输入是否为合法整数
    if (!int.TryParse(userInput, out numLength))
    {
        Console.WriteLine("Invalid input.");
        continue;
    }
    // 校验数值区间
    if (numLength < 8 || numLength > 12)
    {
        Console.WriteLine("Only between 8 and 12.");
        continue;
    }
    // 所有校验通过,终止输入循环
    break;
}

// 循环结束后可直接使用符合要求的numLength变量

如果不需要区分错误类型,也可以用更简洁的单条件判断写法:

int numLength;
Console.WriteLine("Enter a number:");
while (!int.TryParse(Console.ReadLine(), out numLength) || numLength < 8 || numLength > 12)
{
    Console.WriteLine("Invalid input, please enter an integer between 8 and 12.");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:03:20