2010-03-07 116 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)。