2 回答
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
TA贡献1813条经验 获得超2个赞
我不是 100% 确定,但我相当确定这与您的变量operater是 anint但您正在为其分配一个字符的事实有关(这是有效的 - 字符可以分配给 int)然后比较它回到整数(例如做1 == '1')
int x = '1';
Console.WriteLine(x); // outputs 49
Console.WriteLine(x == 1); // outputs false
因此,要修复它,请使用 switch 中的字符:
switch(operater){
case '1': ...
}
或者分配整数 1,2,3,4 而不是字符 '1','2,'3','4'
private void btnadd_Click(object sender, RoutedEventArgs e)
{
num01 = Convert.ToDouble(txtcalcdisplay.Text);
txtcalcdisplay.Text = "";
operater = 2; // here
}
![?](http://img1.sycdn.imooc.com/5333a2320001acdd02000200-100-100.jpg)
TA贡献1848条经验 获得超2个赞
因此,在您操作的点击处理程序(药粥+, - ,*,/等)你是你设定operater变量角色'1','2'等好了,你的operater变量是一个int。但是等等,您不应该将 a 分配char给 anint吗?!好吧,编译器在这里做了一个隐式转换(语言规范说它应该)。
因此,当您这样做时,最终会发生的operater = '1'是operater分配了 49 ('1'的 ASCII 值)。然后当你到达你的 equals 按钮点击处理程序时,它会点击那个 switch 语句。你猜怎么着?你没有 49 的情况。所以什么也没发生,你一直看到你的第二个数字作为屏幕上的文本。
因此,要修复它,请删除您operater在操作员处理程序中分配给的数字周围的单引号。IE:
private void btnsubtract_Click(object sender, RoutedEventArgs e)
{
num01 = Convert.ToDouble(txtcalcdisplay.Text);
txtcalcdisplay.Text = "";
operater = 1; // <-- change this line to be like this, removed the single quotes
}
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报