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

C#带UI计算器代码运行异常求助:计算结果不符合预期

计算器计算结果异常的Bug分析

用C#开发带UI的计算器,包含9个数字按钮、4个运算符按钮和1个计算按钮。运行时计算结果异常,例如计算12×12得到14544,计算10+10得到1020。以下是相关代码片段:

private void button10_Click(object sender, EventArgs e)
{
    num1 = int.Parse(num1.ToString() + "0");
    label2.Text = num1.ToString();

    if (input || input2 || input3 || input4 == true)
    {
        num2 = int.Parse(num2.ToString() + "0");
        label2.Text = num2.ToString();
        input5 = true;
    }
}

public void button11_Click(object sender, EventArgs e)
{
    input = true;
    label1.ResetText();
    label2.ResetText();
}

public void calculate_Click(object sender, EventArgs e)
{
    label2.ResetText();
    label1.ResetText();

    if (input5 == true && input == true)
    {
        result = num1 * num2;
        label1.Text = result.ToString();
    } 
    else if (input5 == true && input2 == true)
    {
        result = num1 / num2;
        label1.Text = result.ToString();
    } 
    else if (input5 == true && input3 == true)
    {
        result = num1 + num2;
        label1.Text = result.ToString();
    } 
    else if (input5 == true && input4 == true)
    {
        result = num1 - num2;
        label1.Text = result.ToString();
    }
}

核心Bug分析

  1. 数字按钮逻辑错误:
    每次按数字按钮时,会同时修改num1和num2。比如输入12后按乘号,再输入12的过程中:

    • 第一次按1:num1从12变成121,num2从0变成1
    • 第二次按2:num1从121变成1212,num2从1变成12
    • 最终计算1212×12=14544,和你遇到的异常结果完全吻合。
  2. 运算符按钮逻辑缺失:
    点击运算符按钮后,只设置了标记位,却没有重置输入状态(比如num2清零),也没有明确“开始输入第二个数”的状态,导致数字按钮仍在修改第一个数。

  3. 条件判断语法不规范:
    if (input || input2 || input3 || input4 == true) 等价于 if (input || input2 || input3 || (input4 == true)),虽然当前可能没引发严重问题,但逻辑表述不准确,应该写成if (input == true || input2 == true || input3 == true || input4 == true)。

  4. 计算按钮逻辑错误:
    计算前先重置了label1和label2,导致用户看不到计算过程;同时多余的input5判断完全没必要,直接根据运算符标记位计算即可。

修正后的关键代码示例

数字按钮(以0为例)

private void button10_Click(object sender, EventArgs e)
{
    // 判断是否已选择运算符,决定修改第一个数还是第二个数
    if (!input && !input2 && !input3 && !input4)
    {
        num1 = num1 * 10 + 0; // 用算术运算替代字符串拼接,更高效安全
        label2.Text = num1.ToString();
    }
    else
    {
        num2 = num2 * 10 + 0;
        label2.Text = num2.ToString();
    }
}

运算符按钮(以乘法为例)

public void button11_Click(object sender, EventArgs e)
{
    input = true; // 标记当前选择乘法
    label1.Text = $"{num1} × "; // 显示第一个数和运算符
    label2.ResetText();
    num2 = 0; // 重置第二个数,准备输入
}

计算按钮

public void calculate_Click(object sender, EventArgs e)
{
    if (input)
    {
        result = num1 * num2;
        label1.Text = $"{num1} × {num2} = {result}";
    } 
    else if (input2)
    {
        result = num1 / num2;
        label1.Text = $"{num1} ÷ {num2} = {result}";
    } 
    else if (input3)
    {
        result = num1 + num2;
        label1.Text = $"{num1} + {num2} = {result}";
    } 
    else if (input4)
    {
        result = num1 - num2;
        label1.Text = $"{num1} - {num2} = {result}";
    }
    label2.ResetText();
    // 重置状态,准备下一次计算
    num1 = 0;
    num2 = 0;
    input = input2 = input3 = input4 = false;
}

内容的提问来源于stack exchange,提问作者reisbananas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:56