【问题标题】:Why is a condition like (0 < a < 5) always true?为什么像 (0 < a < 5) 这样的条件总是正确的?
【发布时间】:2014-01-21 08:04:19
【问题描述】:

我用 C 实现了以下程序

    #include <stdio.h>
    int main() 
    {
       int a  = 10 ; 
       if(0 < a < 5) 
       {
          printf("The condition is true!") ; 
       }
       return 0 ; 
    }

为什么条件0&lt;a&lt;5总是返回true

【问题讨论】:

  • 您可能希望0 &lt; a &amp;&amp; a &lt; 5 表达您在此处显示的数学表达式。
  • 这是一个硬错误。很少有语言可以让你做这样的真正复合条件的事情。
  • @Linuxios:Python 特别是一种允许您编写类似范围测试的语言。

标签: c boolean logic


【解决方案1】:

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

(0 < a) < 5

(0 &lt; 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 程序当然会为每个值生成“范围内”的答案。

【讨论】:

    【解决方案2】:

    因为0 &lt; a 的计算结果为1

    用途:

    a &gt; 0 &amp;&amp; a &lt; 5

    如果您想测试a 是否大于0 并小于5

    【讨论】:

      【解决方案3】:

      由于0 小于100 &lt; a 将始终计算为1,它小于5,使得0 &lt; a &lt; 5 始终为true。将您的条件更改为

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

      【讨论】:

        【解决方案4】:
          if(x<y<z)
        

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

        意识到x&lt;y 返回一个布尔值,即真或假。然后你比较一下 反对任何值“z”。所以“x&lt;y&lt;z”的意图看起来是错误的。

        可以是:

        if(x < y && y < z)
        

        【讨论】:

        猜你喜欢
        • 2013-08-20
        • 2013-02-22
        • 2021-12-23
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        相关资源
        最近更新 更多