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分析
数字按钮逻辑错误:
每次按数字按钮时,会同时修改num1和num2。比如输入12后按乘号,再输入12的过程中:- 第一次按1:num1从12变成121,num2从0变成1
- 第二次按2:num1从121变成1212,num2从1变成12
- 最终计算1212×12=14544,和你遇到的异常结果完全吻合。
运算符按钮逻辑缺失:
点击运算符按钮后,只设置了标记位,却没有重置输入状态(比如num2清零),也没有明确“开始输入第二个数”的状态,导致数字按钮仍在修改第一个数。条件判断语法不规范:
if (input || input2 || input3 || input4 == true)等价于if (input || input2 || input3 || (input4 == true)),虽然当前可能没引发严重问题,但逻辑表述不准确,应该写成if (input == true || input2 == true || input3 == true || input4 == true)。计算按钮逻辑错误:
计算前先重置了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
相关产品推荐
相关产品推荐

