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

C#新手求助:如何实现整数输入校验,非整数时重复询问

解决C#整数输入验证问题:让用户重复输入直到正确

嘿,作为编程和C#的新手,遇到这个问题太正常啦!你现在的代码之所以抛出异常后直接关闭,是因为catch块里又抛出了新的异常,而且没有循环逻辑让用户重新输入——程序遇到未处理的异常就会终止运行。

咱们来调整一下代码,让它能反复询问用户,直到输入正确的整数为止。这里有两种常用的方案:

方案1:用int.TryParse(推荐,更高效)

int.TryParse是专门用来处理这种输入验证场景的,它不会抛出异常,而是返回布尔值告知解析是否成功,比try-catch的开销更小:

static public int AskInt(string question)
{
    int inputNumber;
    do
    {
        Console.Write(question);
        // 尝试解析用户输入,成功就返回结果,失败就提示错误
        if (int.TryParse(Console.ReadLine(), out inputNumber))
        {
            return inputNumber;
        }
        else
        {
            Console.WriteLine("错误!请输入有效的整数。");
        }
    } while (true); // 无限循环,直到用户输入正确为止
}

这个代码的逻辑很清晰:

  • 用do-while循环保证至少让用户输入一次
  • 每次输入后用TryParse尝试转换,成功就直接返回整数
  • 失败的话打印错误提示,然后循环继续,让用户重新输入

方案2:保留try-catch但添加循环

如果你还是想用try-catch的方式,那要去掉抛出异常的代码,改成循环重试:

static public int AskInt(string question)
{
    while (true)
    {
        try
        {
            Console.Write(question);
            return int.Parse(Console.ReadLine());
        }
        catch (FormatException)
        {
            // 只捕获格式错误的异常,不用捕获所有Exception
            Console.WriteLine("错误!请输入有效的整数。");
            // 这里不要抛出异常,直接继续循环就行
        }
    }
}

这里的关键是:

  • 用while(true)无限循环,直到解析成功返回结果
  • catch块里只捕获FormatException(只有输入不是整数时才会触发这个异常,更精准)
  • 捕获异常后只提示错误,不抛出新异常,程序就不会终止,而是回到循环开头让用户重新输入

两种方案都能实现你的需求,更推荐第一种,因为异常处理本来是用来处理意外错误的,而用户输入不符合格式是预期的情况,用TryParse更贴合场景,性能也更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:01