2 回答

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
}

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 關注
- 223 瀏覽
添加回答
舉報