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
相关产品推荐
相关产品推荐

