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
相关产品推荐
相关产品推荐

