2012-02-07 121 views
0

我已經看過,看着調試器,似乎無法弄清楚爲什麼IF語句總是打印消息。如果陳述不正常?

IF語句檢查是否yesno!='Y'||(或)'N' 但無論我輸入y或Y還是n N或H B,它都會顯示...。我不知道什麼舉動了!我似乎無法找到它出錯的地方?

if(yesno != 'Y' || 'N') { ... 

謝謝你們。

+0

pastebin鏈接似乎不工作。由於你的問題似乎圍繞着一個單獨的陳述,爲什麼不把這個包括在問題中。 – 2012-02-07 04:34:51

回答

8

||並不完全代表您的想法。正確的做法是:

if (yesno != 'Y' && yesno != 'N') { ... 

該獨立評估&&的兩側,如果雙方都真正的結果是真實的。

需要注意的是,因爲任何給定的字符是要麼

if (yesno != 'Y' || yesno != 'N') { ... 

總是是真的不Ÿ它不是N.這可能不是你想要的。

+0

但*爲什麼*不能按預期工作? +1指出重言式。我認爲與D.M一起看起來更容易。 as:'!(yesno =='Y'&& yesno =='N')'。 – 2012-02-07 04:32:41

+0

if(yesno!='Y'&& yesno!='N') 完美地工作....謝謝,我有一個腦屁...那是因爲如前面所述,我在44行上正確使用它... 謝謝! – Daniel 2012-02-07 04:39:04

3
if(yesno != 'Y' || 'N') 

應該是:

if(yesno != 'Y' && yesno != 'N') 

您鏈接他們這是不正確。我相當確定你知道你不應該那樣是一個錯字,因爲你在線44上正確使用了&&

+1

+1但是因爲'N'本身是非零的,因此是真的 – kenny 2012-02-07 04:31:11

+0

謝謝,我有一個大腦放屁....這樣一個簡單的錯誤*面對手掌* – Daniel 2012-02-07 04:40:56

+0

@Als - 即使它是一個改進,它仍然總是評估爲真。目前還不清楚你是否應該在這裏使用&&。 – 2012-02-07 21:29:26

2

分開取條件yesno != 'Y' || 'N'。它有兩個條款:

  1. yesno != 'Y'。這可能是你想要的比較;它會檢查char yesno是否不等於值'Y'
  2. 'N'。本條僅對'N'進行評估。作爲一個布爾,'N',這不是零,被認爲是「真實的」。

所以你有「(stuff)||(總是爲真)」。這裏「stuff」是yesno != 'Y',「always true」是'N'。結果永遠是真的。

0

你不能或者表達式(yesno!='Y')和一個語句(「N」)也是一個表達式。它只有兩個或更多表達式可以使用||進行組合和& &以獲得所需的輸出。

if(yesno!="Y"||"N") 

實際上是

if(yesno!="Y" || TRUE) 

這始終是正確的,因爲:

Exp||TRUE=TRUE 

,無論表達的。

use if(yesno!="Y"|| yesno!="N")  // and in this case its && and not || i think 
-1

你需要把

如果(YESNO!= 'Y' || YESNO!= 'N')

你總是需要把充分表達的兩倍。

+0

但它總是評估爲真,因爲變量不能同時是Y和N. – 2012-02-07 21:31:37