2015-10-24 69 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 <這也是正確的。因此,打印字符串。