为什么像(0 <a <5)这样的条件总是正确的?

时间:2014-01-03 15:38:36

标签: c boolean logic

我在C

中实现了以下程序
    #include <stdio.h>
    int main() 
    {
       int a  = 10 ; 
       if(0 < a < 5) 
       {
          printf("The condition is true!") ; 
       }
       return 0 ; 
    }

为什么条件0<a<5始终返回true

4 个答案:

答案 0 :(得分:14)

与Python(具有operator chaining)不同,C将条件评估为:

(0 < a) < 5

(0 < a)的结果为0或1,两者都小于5,因此整体条件为真。

在C中,必须编写范围测试:

0 < a && a < 5

请注意Python脚本:

for a in range(-1,7):
  if 0 < a < 5:
    print a, " in range"
  else:
    print a, " out of range"

产生输出:

-1  out of range
0  out of range
1  in range
2  in range
3  in range
4  in range
5  out of range
6  out of range

使用相同if条件的'等效'C程序当然会为每个值产生“范围内”的答案。

答案 1 :(得分:5)

因为0 < a评估为1

使用:

a > 0 && a < 5

如果您想测试a是否大于0且低于5

答案 2 :(得分:0)

由于0小于100 < a总是评估为1,小于5,总是0 < a < 5 true。将您的条件更改为

if(0 < a && a < 5) {...}     

答案 3 :(得分:0)

  if(x<y<z)

它实际上是有效的语法,但它没有做你想要的。

意识到x<y返回一个bool,即true或false。然后你比较它     反对“z”具有的任何价值。所以“x<y<z”的意图看起来不对。

可以是:

if(x < y && y < z)