C# 未在计算器应用程序中存储运算符
我觉得这有点奇怪。我的代码在运算符未更改的情况下工作,例如2*2*2给我8,但是,当我更改运算符时,它不工作-它转到最后一个运算符。也就是说,当我点击像:9*6/4这样的东西时,它会在除法处阻止我,所以,它给我9*6,当我点击/,答案是1.5。是否未存储来自操作员的信息?如有任何含糊或准确的建议,将不胜感激。这很奇怪,因为如果使用同一个操作符,它就会工作C# 未在计算器应用程序中存储运算符,c#,windows,C#,Windows,我觉得这有点奇怪。我的代码在运算符未更改的情况下工作,例如2*2*2给我8,但是,当我更改运算符时,它不工作-它转到最后一个运算符。也就是说,当我点击像:9*6/4这样的东西时,它会在除法处阻止我,所以,它给我9*6,当我点击/,答案是1.5。是否未存储来自操作员的信息?如有任何含糊或准确的建议,将不胜感激。这很奇怪,因为如果使用同一个操作符,它就会工作 public partial class Form1 : Form { string buffer = " "; char
public partial class Form1 : Form
{
string buffer = " ";
char op;
double[] operand = new double[2];
double result;
int step = 1;
public Form1()
{
InitializeComponent();
}
private void NumberButtons(object sender, EventArgs e)
{
Button b = sender as Button;
buffer += b.Text;
txtBox.Text = buffer;
}
private void Dot(object sender, EventArgs e)
{
if (!buffer.Contains('.'))
{
buffer = buffer + ".";
txtBox.Text = buffer;
}
}
private void Operations(object sender, EventArgs e)
{
Button b = (sender as Button);
op = b.Text[0];
if (buffer.Length == 0)
operand[step - 1] = result;
else
operand[step - 1] = Double.Parse(buffer);
if (step == 2)
{
Result(null, null);
operand[0] = result;
step = 2;
}
else
{
txtBox.Text = operand[0].ToString();
step++;
buffer = "";
}
}
private void Result(object sender, EventArgs e)
{
if (buffer.Length != 0)
operand[1] = Double.Parse(buffer);
switch (op)
{
case '+':
result = operand[0] + operand[1];
break;
case '-':
result = operand[0] - operand[1];
break;
case '*':
result = operand[0] * operand[1];
break;
case '/':
result = operand[0] / operand[1];
break;
}
txtBox.Text = result.ToString();
step = 1;
buffer = " ";
}
private void Clear(object sender, EventArgs e)
{
if (buffer.Length == 0)
{
step = 1;
operand[0] = operand[1] = 0.0;
op = ' ';
result = 0.0;
}
else
buffer = "";
txtBox.Text = buffer;
}
}
}6/4=1.5。仅供参考。@StefanDenchev所以是9/6(我认为在本例中更相关),原因是:
if(step==2).
,基本上您已经将操作设置为新值,所以它使用了该值。。需要返工,我遇到过一次异常,但不确定它是关于什么的:P。应该可以帮助你开始。当然,有点:P。。。如果这是你的意思,它会编译。。。