2017-08-29 46 views
-5

我想鍛鍊下面給出的c程序的輸出,但無法弄清楚。si的價值應該是什麼?

爲什麼si = 0?

#include<stdio.h> 

int main(void){ 

    float p = 1000; 
    float r = 5; 
    float t = 2; 

    float si = p * r * t/100; 

    printf("SI = %d", si); 

    return 0; 

} 
+4

'的printf( 「SI =%d」,SI );''但'si'是'float':改爲'%f' –

+3

'%d'是**整數** – litelite

+1

爲什麼你認爲'si'是'0'? – melpomene

回答

2

您在浮點表示,而你使用%d說明符的printf強制期待的int傳遞價值。

當您將變量傳遞給像printf這樣的變量函數時,沒有「自動轉換」,因爲的值是作爲實際數據類型傳遞給函數的(因爲是更大的兼容類型)弱類型的語言。

如果你通過類型不兼容的內部表示你會得到垃圾輸出。

變化

printf("SI = %d", si); 

printf("SI = %f", si); 

或者(如果你想獲得表達的積分值)

printf("SI = %d", (int)si); 
+0

任何想法爲什麼他得到0而不是預期的垃圾值? –

+1

@VikasYadav考慮:我給你一個'浮動',並把它放在'浮動'框中。你看看「int」框,看看......什麼都沒有......並打印出來。也許從前面遺留的0,也許不是,也許盒子重疊?它是_undefined behavior_。 – chux