从键盘输入数字找最大值程序报错:输入字符串格式不正确
问题分析与修复
你的代码存在两个核心问题,直接导致了格式异常和逻辑失效:
1. 格式异常的根源
Convert.ToInt32(Console.ReadLine())在输入不是有效整数(比如误输字母、空格、空值)时会直接抛出Input string was not in a correct format异常。哪怕你预设用户只输入整数,实际运行中难免出现误操作,必须做输入有效性校验。
2. 循环逻辑的致命错误
你在循环外仅读取了一次input变量,循环条件while (!input.ToLower().Equals("0"))永远判断的是第一次输入的值——这意味着除非第一次就输入0(此时循环体根本不会执行),否则循环会无限运行,完全无法触发停止逻辑。而且循环体里重新读取的输入和input变量完全脱节,逻辑完全混乱。
修复后的代码
// 初始化max为int类型最小值,确保负数输入也能正确获取最大值 int max = int.MinValue; int inputNum; do { Console.WriteLine("请输入数字(输入0停止):"); string input = Console.ReadLine(); // 用TryParse校验输入是否为有效整数,避免抛出异常 if (int.TryParse(input, out inputNum)) { if (inputNum == 0) { break; // 输入0,直接终止循环 } if (inputNum > max) { max = inputNum; } } else { Console.WriteLine("输入无效,请输入整数!"); } } while (true); // 处理未输入任何有效数字的边界情况 if (max == int.MinValue) { Console.WriteLine("未输入任何有效数字"); } else { Console.WriteLine($"最大值为:{max}"); } Console.ReadLine();
关键修复点
- 用
int.TryParse替代Convert.ToInt32:既校验输入有效性,又不会因无效输入抛出异常,通过返回值告知校验结果。 - 重构循环逻辑:每次循环内读取输入,实时判断是否为0并终止循环,同时同步更新最大值。
- 初始化
max为int.MinValue:解决输入全为负数时,初始值0会被错误当成最大值的问题。 - 增加无效输入提示:提升用户体验,避免程序无反馈卡死。
内容的提问来源于stack exchange,提问作者Catalin Stoia
相关产品推荐
相关产品推荐

