2013-05-02 48 views
1

我有我的代碼是這樣的。在C語言的'if語句'中多次檢查但不工作

int L=25; 
float x; 

值到x由長的計算

if(x<=L) 
    x=x-L; 

分配但它不改變當x = L的值。

我還試圖

if(x>L || x==L) 

即使在這種情況下,x的值不爲X = L變化。

請幫

+0

'x'和'L'的數據類型是什麼? – 2013-05-02 14:36:24

+0

請告訴我們'x'和'L'在if語句之前和之後。如果'x'非常消極,這將因精度有限而發生。 – 2013-05-02 14:37:37

+0

[浮點比較](http://stackoverflow.com/questions/7011184/floatingpoint-comparison) – soon 2013-05-02 14:37:43

回答

-2

編輯:相反,我最初的看法,和一些其他的,這個問題是不是與比較不同類型做。根據評論,最新的C標準似乎是免費的(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf),它清楚地表明,比較會強制類型轉換,通常是向更高精度的類型轉換。

從我個人的角度來看,更明智的做法是明確這些轉換,因爲在掃描代碼時發生了什麼很明顯。這裏的問題可能是另一個回答者強調的問題。

這很可能是您的打字問題。最好是要明確:

int L=25; 
float x; 
// Value to x is allotted by long calculation 

if (x <= ((float)L)) { 
    x = x - ((float)L); 
} 

+2

如果我犯了一個值得倒下的錯誤,請賜教! – 2013-05-02 14:40:37

+7

在這個問題上有一個序列downvoter ... – UmNyobe 2013-05-02 14:44:04

+3

鑑於'x'是一個'float','L'是一個'int','x <= L'具有與'x <=((浮動)L)'。 C自動將這個表達式的'L'轉換爲'float',所以你的改變什麼都不做。同樣,'x = x - L'具有與'x = x - ((float)L)'相同的行爲。而且,對於好的措施,'(float)L'的括號是多餘的。 – 2013-05-02 14:44:53

2

要麼x比25稍大和你一直誤以爲它是整整25由不正確或代碼顯示在整個價值軟件正在執行並且使用的值與您在此問題中顯示的值不同。