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

C#计算器num1变量未重置问题:输入stop后仍保留历史值

C#计算器变量重置问题修复

问题根源

  1. 大小写匹配错误:代码中判断结束操作是"Stop"(首字母大写),但实际输入小写"stop"时无法触发匹配,内层循环未退出,num1始终保留上一次计算的结果。
  2. 输入逻辑冗余:选择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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:20:19