如何让C#的Try-Catch在输入非整数时持续捕获并重新输入
解决方案
要实现输入非整数时停留在校验流程直到输入有效整数,核心是把输入校验逻辑封装成可复用的循环逻辑,确保每次输入都经过验证。以下是修改后的代码:
private static double FahrToCels(int f) { double fahrenheit = f; double celsius = (fahrenheit - 32) * 5 / 9; return celsius; } // 新增辅助方法:获取有效的整数输入 private static int GetValidIntegerInput(string prompt) { int inputValue; bool isValid; do { Console.Write(prompt); isValid = int.TryParse(Console.ReadLine(), out inputValue); if (!isValid) { Console.WriteLine("输入无效!请输入整数形式的温度:"); } } while (!isValid); return inputValue; } private static void Main(string[] args) { int fahrenheit = 0; double celsius = 0; Console.WriteLine("您好,欢迎来到桑拿房!"); // 第一次输入:调用辅助方法确保输入有效 fahrenheit = GetValidIntegerInput("请输入华氏温度:"); celsius = Math.Round(FahrToCels(fahrenheit), 0); while (celsius < 73 || celsius > 77) { if (celsius < 73) { Console.WriteLine("温度过低!"); // 温度过低时的输入同样用辅助方法校验 fahrenheit = GetValidIntegerInput("请输入更高的温度:"); } else if (celsius > 77) { Console.WriteLine("温度过高!"); // 温度过高时的输入同样用辅助方法校验 fahrenheit = GetValidIntegerInput("请输入更低的温度:"); } celsius = Math.Round(FahrToCels(fahrenheit), 0); } // 可选:添加温度符合要求后的提示 Console.WriteLine($"当前温度符合要求,摄氏温度为{celsius}℃"); }
修改说明:
- 新增
GetValidIntegerInput方法,使用int.TryParse替代int.Parse(无需捕获异常,更高效),通过do-while循环持续提示用户输入,直到解析出有效的整数。 - 所有需要输入整数的地方都调用这个辅助方法,确保第一次输入和后续调整温度时的输入都经过校验。
- 移除了原来单次执行的try-catch块,替换为循环校验逻辑,彻底解决非整数输入后程序继续执行的问题。
内容的提问来源于stack exchange,提问作者Colistin
相关产品推荐
相关产品推荐

