原文:dalao博客
之所以写这个,是因为在POJ上用% l f lf lf会爆炸…
首先,说明下,
C
+
+
C++
C++将实数分为单精度和高精度这些花里胡哨的东西…
p
r
i
n
t
f
printf
printf的
%f
说明符的确既可以输出
f
l
o
a
t
float
float型又可以输出
d
o
u
b
l
e
double
double型。
根据一种“默认参数提升”的睿智东西,
f
l
o
a
t
float
float型在%
f
f
f输出时,会被提升为
d
o
u
b
l
e
double
double型。因此使用
p
r
i
n
t
f
printf
printf只会看到双精度数。
但作为
p
r
i
n
t
f
printf
printf的孪生兄弟
s
c
a
n
f
scanf
scanf,情况就完全不同了,它接受指针,可这里没有类似的类型提升。向
f
l
o
a
t
float
float存储和向
d
o
u
b
l
e
double
double存储大不一样。也就是不会出现提升的骚操作。因此,
s
c
a
n
f
scanf
scanf是要区别%
f
f
f和%
l
f
lf
lf。
#最后,讲一下总结出来的东西:
不管你三七二十一,只要用
p
r
i
n
t
f
printf
printf输出实数,直接用%ff就好了。而当你用
s
c
a
n
f
scanf
scanf读入实数,就不得不把%
f
f
f%
l
f
lf
lf分好了