Если заявление не кажется, чтобы проверить другие && в заявлении - PullRequest
1 голос
/ 24 июня 2011

У меня есть выражение if, которое выглядит следующим образом:

int count=0;
string Check;

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

Если count равно 4, а Check равно "-s" или "-S", оно все равно вводит этот оператор if из-за count == 4. Кажется, это полностью игнорирует вторую часть. Что-то я делаю не так?

Ответы [ 7 ]

4 голосов
/ 24 июня 2011

Это всегда будет случай либо Check!="-s", либо Check!="-S". Следовательно, ваше утверждение if эквивалентно if (count==4).

2 голосов
/ 24 июня 2011

Может быть более понятным для использования:

if (count==4 && Check!="-s" && Check!="-S")
2 голосов
/ 24 июня 2011

Правильное утверждение:

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

Утверждение, которое вы написали, верно, если у вас есть count = 4 и Check = "-S", потому что тогда первая часть ИЛИ будет истинной.

2 голосов
/ 24 июня 2011

Если count == 4 и Check == "-s", то выражение справа от || равно true.Если count == 4 и Check == "-S", то выражение слева от || равно true.Таким образом, у вас есть правда или правда, которая правда.Таким образом, ваш if-блок выполнен.

2 голосов
/ 24 июня 2011

Что ж, если 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.
{
  // ...
}
1 голос
/ 24 июня 2011

Вы хотите ввести тело if, если и только если Check is! = From -s или -S и count = 4, верно?

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

должно работать.

или

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

должно работать.

(Не запоминайте имя функции для строчной строчки, вам нужно ее найти)

Надеюсь, эта помощь,

1 голос
/ 24 июня 2011

Вы должны использовать! Strcmp (Check, "-s") и! Strcmp (Check, "-S") вместо! =.

Если вы используете ==, вы сравниваете указатели, а это не то, что вы хотите. Указатели всегда будут разными, поэтому ваш второй аргумент всегда будет верным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...