2011-11-05 36 views
1

我對我的if循環有一些麻煩。評估if語句中的單個字符:C++

首先我已經指定了char符號。

void evaluate_ps(istream& input) 
{ 
    char sign; 
    input >> sign; 
    cout << sign << endl; 
    check(sign); 
} 

,打印/所以我的標誌的值爲 '/'

然後我去我的無效支票(字符操作)功能

void check(char operation) 
{ 
    if(operation != '-' || operation != '+' || 
     operation != '*' || operation != '/') 
     { 
     return false; 
     } 
     else return true; 
} 

,它的返回false ...爲什麼!!!!我似乎無法弄清楚這一點。

謝謝大家。

+1

輕微的風格問題(與問題無關):'if'子句*中表達式的結果是一個布爾值。你可以'return(operation!=' - '&& operation!= ...)'。代碼看起來像'if(x)return true;否則返回false;'應該提高紅旗。 –

+0

沒有「如果循環」這樣的事情。循環是一個重複執行的語句:for,while,do-while。 if語句僅僅是一個if語句。 –

+0

要完成Keith Thompson,你的意思是說你的if **塊**。 –

回答

2

你可能是指所有的||&&

if(operation != '-' && operation != '+' && 
    operation != '*' && operation != '/') 

否則,它會永遠進入if語句,因爲一個角色永遠不會4等於一個不同的東西。

3

發生這種情況是因爲您正在使用||(OR)運算符。當operation/時,支票operation != '-'返回true。由於||短路,整個表達式返回true。

將其更改爲& &(AND):

if (operation != '-' && operation != '+' && 
    operation != '*' && operation != '/') 

另一種方式來寫是這樣的:

if (!(operation == '-' || operation == '+' || 
     operation == '*' || operation == '/')) 
+0

哇..謝謝。愚蠢的錯誤。 – 40Alpha

0

if語句響應/不等於其他值

之一

想想即使在一般意義上「或」

如果藍不綠或不紅或不藍說沒了

你需要做類似如下:

if (operation != '+' && operation != '-' && operation != '/' && operation != '*') { 
    return false; 
} 
return true; 

這樣的類似這樣的

如果藍色不是綠色的,不是紅色的,不是藍色的,不說不行