2011-11-05 34 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; 

这样的类似这样的

如果蓝色不是绿色的,不是红色的,不是蓝色的,不说不行