C#计算器num1变量未重置问题:输入stop后仍保留历史值
C#计算器变量重置问题修复
问题根源
- 大小写匹配错误:代码中判断结束操作是
"Stop"(首字母大写),但实际输入小写"stop"时无法触发匹配,内层循环未退出,num1始终保留上一次计算的结果。 - 输入逻辑冗余:选择
Stop操作时,程序仍会强制要求输入第二个数字,流程不符合预期,易造成混淆。
修复后的代码
bool x = true; while (x) { double num1; double ans; double num2; string cal; bool y = true; Console.WriteLine("输入数字"); // 添加数字输入验证,避免非数字导致报错 while (!double.TryParse(Console.ReadLine(), out num1)) { Console.WriteLine("请输入有效的数字"); } while (y) { Console.WriteLine("请选择计算操作"); cal = Console.ReadLine()?.Trim().ToLower(); // 统一转为小写,消除大小写影响 // 优先判断结束操作,无需输入第二个数字 if (cal == "stop") { y = false; continue; } Console.WriteLine("输入数字"); while (!double.TryParse(Console.ReadLine(), out num2)) { Console.WriteLine("请输入有效的数字"); } switch (cal) { case "+": ans = add(num1, num2); Console.WriteLine($"结果 {ans}"); num1 = ans; break; case "-": ans = sub(num1, num2); Console.WriteLine($"结果 {ans}"); num1 = ans; break; case "/": // 增加除数非零判断 if (num2 == 0) { Console.WriteLine("除数不能为0"); break; } ans = div(num1, num2); Console.WriteLine($"结果 {ans}"); num1 = ans; break; case "*": ans = mul(num1, num2); Console.WriteLine($"结果 {ans}"); num1 = ans; break; default: Console.WriteLine("无效的操作,请输入 +、-、*、/ 或 stop"); break; } } } private static double add(double firstnumber, double secondnumber) { return firstnumber + secondnumber; } private static double sub(double firstnumber, double secondnumber) { return firstnumber - secondnumber; } private static double div(double firstnumber, double secondnumber) { return firstnumber / secondnumber; } private static double mul(double firstnumber, double secondnumber) { return firstnumber * secondnumber; }
关键修改点
- 操作字符串转为小写并去除空格,确保
stop或Stop都能触发结束逻辑。 - 调整流程顺序:先判断是否为结束操作,直接退出内层循环,跳过冗余的数字输入。
- 增加输入验证,避免非数字输入导致程序崩溃。
- 添加除数非零判断,提升程序健壮性。
- 简化方法返回逻辑,去掉冗余临时变量。
内容的提问来源于stack exchange,提问作者Adam Walker
相关产品推荐
相关产品推荐

