2015-10-24 34 views
-2

我正在修改C并正在做一些测试程序。在一个程序中,我正在检查一个正在翻译这种情况的条件。这个C程序的输出我不明白

#include <stdio.h> 
int main() 
{ 
if(0 <= 3000.000000 <= 2000.00){ //this is the condition 
printf("3000 is less than 2000, whoa.. \n"); 
} 
return 0; 
} 

输出始终是此打印字符串。我不明白为什么。

P.S

我测试的中间值,即3000.000000这里,但它可以有一些变化。

+3

可能重复[什么是“比较常量与布尔表达式总是为真”警告的意思?](http://stackoverflow.com/questions/30807947/what-does-comparing-constant-with-boolean-expression- is-always-true-warning-me) –

回答

6

条件被解析这样的:

if((0 <= 3000.000000) <= 2000.00){ 

第一部分,(0 <= 3000.000000),是真实的,并且与2000.00比较结果为1。而1 <= 2000.00是真的。

如果你想测试一个值a是否位于两个值bc之间或等于要么,那么你就需要沿着你要通过抓的

(a >= b) && (a <= c) 
+3

XD太快。我无法在您之前发布我的答案,我无法评论您在更正错误之前告诉您的错别字。 – Arc676

+0

ahh关联规则... –

+0

我的意思是你把'false'改成'true'的第一个编辑。 – Arc676

4

线条的表达在C中,布尔值是整数:01

因此,该行被解释为从左到右:第一个0 <= 3000,这是真的,因此它最终为1。然后,这个值被输入到下一半,(1) <= 2000,这显然是正确的。

3

它会在printf中打印字符串。

因为条件是静态的。

0总是小于30000.000000。对于下一个条件,第一个条件的输出返回1.它使用1.

检查第二个条件检查是1 < = 2000.00。这种情况也是如此。

所以,只有这个打印字符串。

0

将第一个条件评估为1作为输出,并进一步检查1 <这也是正确的。因此,打印字符串。