为啥像 (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<a<5
总是返回true
?
【问题讨论】:
您可能希望0 < a && a < 5
表达您在此处显示的数学表达式。
这是一个硬错误。很少有语言可以让你做这样的真正复合条件的事情。
@Linuxios:Python 特别是一种允许您编写类似范围测试的语言。
【参考方案1】:
与 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 程序当然会为每个值生成“范围内”的答案。
【讨论】:
【参考方案2】:因为0 < a
的计算结果为1
。
用途:
a > 0 && a < 5
如果您想测试a
是否大于0
并小于5
。
【讨论】:
【参考方案3】:由于0
小于10
,0 < a
将始终计算为1
,它小于5
,使得0 < a < 5
始终为true
。将您的条件更改为
if(0 < a && a < 5) ...
【讨论】:
【参考方案4】: if(x<y<z)
它实际上是有效的语法,但它没有做你想要的。
意识到x<y
返回一个布尔值,即真或假。然后你比较一下
反对任何值“z”。所以“x<y<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) 这样的条件总是正确的?的主要内容,如果未能解决你的问题,请参考以下文章