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

从键盘输入数字找最大值程序报错:输入字符串格式不正确

问题分析与修复

你的代码存在两个核心问题,直接导致了格式异常和逻辑失效:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:39:25