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

Posted

技术标签:

【中文标题】为啥像 (0 < a < 5) 这样的条件总是正确的?【英文标题】: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 特别是一种允许您编写类似范围测试的语言。 【参考方案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)

【讨论】:

从mofeel.net/1094-comp-lang-c++/2999.aspx 或bytes.com/topic/c/answers/805129-can-you-do-if-x-y-z-fctn1 无归属地复制 所以有人在 2008 年写出了你在 2013 年完全独立提出的完全相同的词?你是认真的吗? @Pekka웃:告诉我这是不是一个完整的复制粘贴..!!我没有使用你提供的链接..!!在发布答案之前,我确实会参考链接..!!有时我们必须从别人那里借一些句子..!!但答案必须与问题相关..!!

以上是关于为啥像 (0 < a < 5) 这样的条件总是正确的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥像这样使用 find_if 会失败?

为啥python列表在使用=运算符时会像这样[重复]

java中Object 类怎么赋值 为啥我这样赋值有错

定义int i=1,在执行while(i++<5)后,i的值为?为啥呢

为啥这个组合框看起来像这样?

为啥这个 Scanf 会导致无限循环?