如果声明似乎没有检查其他&&在声明中

时间:2011-06-23 22:10:18

标签: c++ if-statement

我有一个if语句,如下所示:

int count=0;
string Check;

if ((count==4 && Check!="-s")||(count==4 && Check!="-S"))

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

7 个答案:

答案 0 :(得分:4)

Check!="-s"Check!="-S"总是如此。因此,您的if语句等同于if (count==4)

答案 1 :(得分:2)

好吧,如果Check"-S",那么它甚至不会检查第二对条件,因为您使用||进行检查。对于相反的情况也是如此。如果一个是假的,另一个是真的。将其替换为&&

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, alright.
     Check != "-s") || // Check is "-S", 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.
{
  // ...
}

答案 2 :(得分:2)

如果count == 4Check == "-s",则||右侧的表达式为真。如果count == 4Check == "-S",则||左侧的表达式为真。所以你有真实或真实,这是真的。因此,执行了if-block。

答案 3 :(得分:2)

正确的陈述是:

if(count==4 && (Check != "-s" || Check!="-S"))

如果你有count = 4和Check =“ - S”,你写的语句是真的,因为那时OR的第一部分是真的。

答案 4 :(得分:2)

可能更清楚使用:

if (count==4 && Check!="-s" && Check!="-S")

答案 5 :(得分:1)

你应该使用!strcmp(Check,“ - s”)和!strcmp(Check,“ - S”)代替!=。

如果你使用==你比较指针,这不是你想要的。指针将始终不同,因此您的第二个参数将始终为真。

答案 6 :(得分:1)

当且仅当Check是!=来自-s或-S并且count is = 4时,你想输入if主体吗?

if ( (Check!="-s" && Check!="-S") && count==4 ) 

应该有用。

if ( Check.tolower() !="-s" && count==4 ) 

应该有用。

(不记得小写字符串的函数名称,你必须查找它)

希望这有帮助。