我想鍛鍊下面給出的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;
}
我想鍛鍊下面給出的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;
}
您在浮點表示,而你使用%d
說明符的printf強制期待的int
傳遞價值。
當您將變量傳遞給像printf這樣的變量函數時,沒有「自動轉換」,因爲c的值是作爲實際數據類型傳遞給函數的(因爲c是更大的兼容類型)弱類型的語言。
如果你通過類型不兼容的內部表示你會得到垃圾輸出。
變化
printf("SI = %d", si);
到
printf("SI = %f", si);
或者(如果你想獲得表達的積分值)
printf("SI = %d", (int)si);
任何想法爲什麼他得到0而不是預期的垃圾值? –
@VikasYadav考慮:我給你一個'浮動',並把它放在'浮動'框中。你看看「int」框,看看......什麼都沒有......並打印出來。也許從前面遺留的0,也許不是,也許盒子重疊?它是_undefined behavior_。 – chux
'的printf( 「SI =%d」,SI );''但'si'是'float':改爲'%f' –
'%d'是**整數** – litelite
爲什麼你認爲'si'是'0'? – melpomene