带有if语句的布尔表达式中的问题

时间:2011-07-21 15:12:38

标签: c expression

我需要一些确认。我总是得到正确的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 个答案:

答案 0 :(得分:2)

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

我希望有时候你可以说if (array[i] == [a, b, c])或其他什么。

答案 1 :(得分:2)

您正在做的是或者是“布尔评估array[i]==a 直接bc的结果。

换句话说,( (array[i] == a) || (b) || (c) )实际上就是你正在做的事情 - 可能不是你想要的!

您需要单独评估布尔表达式:

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

答案 2 :(得分:1)

用以下代码替换您的代码:

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

布尔条件的每个部分必须是完整的表达式。虽然您编写的是有效的C代码,但它无法达到您想要的效果:您需要在每个部分进行数组元素比较。

答案 3 :(得分:0)

“有人”是对的。你需要使用:

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

您的程序始终生成正确的输出。尝试任何i不等于11,12或13。