C#入门开发者求教:华氏度转摄氏度程序输入新温度运行异常如何解决
代码问题修复说明
核心错误点
- 循环内无温度更新逻辑:do-while循环运行过程中没有读取用户新输入的温度、重新计算摄氏度值的逻辑,首次输入的温度值固定后,要么进入死循环重复提示,要么直接跳出循环,完全不会响应后续输入
- 自定义转换函数未使用:定义的
FahrToCel转换函数在主逻辑中完全没有调用,且原函数参数为int类型,和实际读取的double类型华氏度不匹配 - 判断分支存在漏洞:当温度处于73-77区间但不等于75时,无匹配的判断分支,程序无任何输出提示
- 浮点数等值判断风险:直接用
==判断浮点数是否等于75,容易因为浮点计算精度误差导致判断失效
修复后完整代码
using System; namespace Bastun1 { class Program { // 修改函数参数为double类型,适配输入的浮点型温度 public static double FahrToCel(double fahr) { double cel = (fahr - 32) * 5 / 9; return cel; } public static void Main(string[] args) { double celsius; double fahrenheit; do { Console.WriteLine("请输入华氏温度:"); fahrenheit = Convert.ToDouble(Console.ReadLine()); // 统一调用自定义转换函数 celsius = FahrToCel(fahrenheit); Console.WriteLine("转换后的摄氏温度为:" + celsius); if (celsius > 77) { Console.WriteLine($"警告!!当前温度{celsius}过高,请调低温度"); } else if (celsius < 73) { Console.WriteLine($"{celsius}温度还未达标,请调高温度"); } // 替换浮点数等值判断为范围判断,避免精度问题 else if (Math.Abs(celsius - 75) < 0.01) { Console.WriteLine("温度完美!享受吧"); } // 补全中间区间的提示 else { Console.WriteLine($"{celsius}处于可接受范围,接近完美温度"); } Console.WriteLine("请按任意键继续。"); Console.ReadLine(); } while (celsius < 73 || celsius > 77); Console.WriteLine($"当前温度为{celsius},温度完美!享受吧"); Console.ReadKey(); } } }
内容的提问来源于stack exchange,提问作者Fo Ya
相关产品推荐
相关产品推荐

