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

C#课程作业:如何在温度转换程序中正确使用Try-Catch?

如何在C#的桑拿温度转换程序中添加Try-Catch异常处理?

问题描述

我正在学习C#课程并完成第二项作业,已经写好了桑拿温度转换的代码:输入华氏度转换为摄氏度,合适的桑拿温度为73-77℃。但作为C#新手,我不清楚如何及在何处使用Try-Catch(搜索到的方案多为Java相关),现有代码如下:

public static int FahrToCel(int fahr) {
    int cel = (fahr - 32) * 5 / 9;
    return cel;
}
public static void Main(string[] args) {
    Console.WriteLine("Skriv in Fahrenheit: ");
    int fahrenheit = int.Parse(Console.ReadLine());
    int celsius = FahrToCel(fahrenheit);
    int lowerTempLimit = 73;
    int upperTempLimit = 77;
    do {
        if (celsius < lowerTempLimit) {
            Console.WriteLine("Bastun är inte tillräckligt varmt. Värme i bastun {0}, skruva upp värmen", celsius);
        } else if (celsius > upperTempLimit) {
            Console.WriteLine("Bastun är för varmt. Värme i bastun {0}, skruva ner värmen", celsius);
        }
    } while (false);
}

解决方案

嘿,作为C#新手碰到异常处理的困惑太正常了!其实C#里的Try-Catch用法和Java很相似,我来一步步教你怎么加到你的代码里。首先得明确:你代码里最容易出问题的地方就是int.Parse(Console.ReadLine())——要是用户输入的不是整数(比如字母、小数),或者数字超出了int的范围,程序直接就崩了,这时候就需要Try-Catch来兜底。

第一步:明确要捕获的异常类型

  • FormatException:当输入内容没法转换成int时抛出(比如输入了"abc")
  • OverflowException:当输入的数字太大/太小,超出int的取值范围时抛出

第二步:重构代码,加入Try-Catch逻辑

我还给你优化了循环逻辑,让用户输入错误后能重新尝试,而不是直接退出程序。修改后的完整代码如下:

public static int FahrToCel(int fahr) {
    int cel = (fahr - 32) * 5 / 9;
    return cel;
}
public static void Main(string[] args) {
    int lowerTempLimit = 73;
    int upperTempLimit = 77;
    int fahrenheit;
    bool isValidInput = false;

    // 循环直到用户输入有效的整数
    do {
        Console.WriteLine("Skriv in Fahrenheit: ");
        try {
            // 把可能抛出异常的代码放进try块
            fahrenheit = int.Parse(Console.ReadLine());
            isValidInput = true; // 输入有效,标记后退出循环
        } catch (FormatException) {
            // 捕获格式错误的异常,给用户提示
            Console.WriteLine("Fel! Vänligen skriv ett giltigt heltal.");
        } catch (OverflowException) {
            // 捕获数字超出范围的异常
            Console.WriteLine("Fel! Talet är för stort eller för litet för att hanteras.");
        }
    } while (!isValidInput);

    // 输入有效后,执行温度转换和判断
    int celsius = FahrToCel(fahrenheit);
    if (celsius < lowerTempLimit) {
        Console.WriteLine("Bastun är inte tillräckligt varmt. Värme i bastun {0}, skruva upp värmen", celsius);
    } else if (celsius > upperTempLimit) {
        Console.WriteLine("Bastun är för varmt. Värme i bastun {0}, skruva ner värmen", celsius);
    } else {
        // 补充合适温度的提示,让程序更完整
        Console.WriteLine("Bastun är på perfekt temperatur! Värme: {0}℃", celsius);
    }
}

关键细节说明

  • try块:专门包裹所有可能抛出异常的代码,这里就是读取输入并转换为int的部分。
  • catch块:可以有多个,分别对应不同类型的异常,针对不同错误给出精准提示,用户体验更好。
  • 循环控制:通过isValidInput这个标记来控制循环,确保只有用户输入有效的整数后,才会继续执行后面的温度判断逻辑。
  • 另外你原来的do-while(false)循环其实不会重复执行,我把它改成了处理输入的循环,让程序更实用。

这样修改后,你的程序就能优雅处理各种错误输入,再也不会轻易崩溃啦!

内容的提问来源于stack exchange,提问作者S. Gunel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:28