如果语句似乎不检查语句中的其他&&

问题描述

| 我有一个if语句,如下所示:
int count=0;
string Check;

if ((count==4 && Check!=\"-s\")||(count==4 && Check!=\"-S\"))
如果
count
等于4,而
Check
等于
\"-s\"
\"-S\"
,则由于
count == 4
仍会输入此
if
语句。它似乎完全忽略了第二部分。我做错了什么吗?     

解决方法

        好吧,如果
Check
是ѭ4then,那么它甚至不会检查第二对条件,因为您以
||
进行了检查。相反的情况也是如此。如果一个为假,则另一个为真。用“ 10”代替。
int count = 4;
string Check = \"-S\";

if( (count == 4 && // count is 4,alright.
     Check != \"-s\") || // Check is \"-S\",alright I\'m done thanks to || (OR)
    (count == 4 &&
     Check != \"-S\") )
{
  // ...
}

int count = 4;
string Check = \"-s\";

if( (count == 4 && // count is 4,time to check the other condition pair...
    (count == 4 && // count is 4,alright.
     Check != \"-S\") ) // Check is \"-s\",which is different from \"-S\",perfect.
{
  // ...
}
现在是更正的版本:
int count = 4;
string Check = \"-S\";

if( (count == 4 && // count is 4,alright.
     Check != \"-s\") && // Check is \"-S\",different from \"-s\",now on to the other condition!
    (count == 4 && // count is 4,alright.
     Check != \"-S\") ) // Check is \"-S\"... oh dang! No executed code for you.
{
  // ...
}
    ,        
Check!=\"-s\"
Check!=\"-S\"
总是这样。因此,您的if语句等效于
if (count==4)
。     ,        如果是
count == 4
Check == \"-s\"
,则
||
右边的表达式为true。如果是
count == 4
Check == \"-S\"
,则
||
左侧的表达式为true。所以你有对或对。因此,您的if块将被执行。     ,        正确的声明是:
if(count==4 && (Check != \"-s\" || Check!=\"-S\"))
如果count = 4且Check = \“-S \”,则您编写的语句为true,因为OR的第一部分为true。     ,        使用起来可能会更清楚:
if (count==4 && Check!=\"-s\" && Check!=\"-S\")
    ,        您应该使用!strcmp(Check,\“-s \”)和!strcmp(Check,\“-S \”)代替!=。 如果使用==,则比较指针,这不是您想要的。指针将始终不同,因此您的第二个参数将始终为true。     ,        您希望仅当-s或-S中的Check为!=且count为= 4时才输入if主体吗?
if ( (Check!=\"-s\" && Check!=\"-S\") && count==4 ) 
应该管用。 要么
if ( Check.tolower() !=\"-s\" && count==4 ) 
应该管用。 (不记得要小写字符串的函数名称,必须先查找一下) 希望对您有所帮助。