2010-03-07 114 views
1
double d; 
scanf("%f", &d); 
printf("%f", d); 

結果:輸入輸出

輸入:10.3

輸出:0.00000

爲什麼呢?我認爲輸出應該是10.3 visual studio 2008.

+0

現在你的問題已解決,http://stackoverflow.com/questions/2377733/how-does-this-program-work可能會澄清一些事情! – Lazer 2010-03-07 19:12:42

回答

7

對於scanf(),%f是爲float。對於double,您需要%lf。所以,

#include <stdio.h> 
main() { 
    double d; 
    scanf("%lf", &d); 
    printf("%f\n", d); 
} 

與輸入10.3產生10.300000

+0

對於%4.1lf格式的字符串+1字符串Sergey可以查看此內容:http://www.cplusplus.com/reference/clibrary/cstdio/printf/ – stacker 2010-03-07 10:13:06

+6

'scanf()'需要'%lf',但對於'printf ()','%f'意味着'double'(並且也使用'float',因爲'float'在參數列表的變量部分被提升爲'double')。 '%lf'對'printf()'沒有意義。 – caf 2010-03-07 10:20:46

+0

printf是一個可變參數函數,所以參數提升不需要應用 - 編譯器不知道格式字符串之外的參數類型。說,%lf是需要的。 – 2010-03-07 14:18:27

1

嘗試用%lf代替%f。在處理float而不是double時使用%f。 (或者,您可以製作d a float)。