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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:26:05