我在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 :(得分: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
小于10
,0 < 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)