проблема в логическом выражении с оператором if - PullRequest
0 голосов
/ 21 июля 2011

Мне нужно подтверждение. Я всегда получаю правильные o / p, но кто-то сказал мне, что следующее выражение не будет работать

Заранее спасибо.

#define a 11

#define b 12

#define c 13     
    // I want if array[i] has values of any of these  then do something
    if( array[i] ==  (a) ||(b) ||( c))    
   // some function    
  else    
  printf("no match"); 

Ответы [ 4 ]

2 голосов
/ 21 июля 2011

То, что вы делаете, является или 'в результате логического вычисления array[i]==a напрямую в направлении b, c.

Другими словами, ( (array[i] == a) || (b) || (c) )эффективно то, что вы делаете - вероятно, не то, что вы намеревались!

Вам нужно будет вычислять логические выражения отдельно:

(array[i] == a) || (array[i] == b) ...

2 голосов
/ 21 июля 2011
 if (array[i] ==  a || array[i] == b || array[i] == c){
       ... 
   }

Мне иногда хочется, чтобы вы могли сказать if (array[i] == [a, b, c]) или что-то в этом роде.

1 голос
/ 21 июля 2011

Замените ваш код следующим:

if( array[i] == a || array[i] == b || array[i] == c)

Каждая часть логического условия должна быть полным выражением.Хотя то, что вы написали, является допустимым кодом C, оно не дает того, чего вы хотите: вам нужно сравнивать элементы массива в каждой части.

0 голосов
/ 21 июля 2011

«Кто-то» правильный.Вам необходимо использовать:

if ((array[i] == a) || (array[i] == b) || (array[i] == c))

Ваша программа не всегда выдает правильный вывод.Попробуйте с любым i, не равным 11, 12 или 13.

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