假设我有以下 C 代码:
double var;
scanf("%lf", &var);
printf("%lf", var);
printf("%f", var);
它从标准输入变量“var”读取,然后在标准输出“var”中打印两次。
我知道这就是您从标准输入读取双变量的方式,但我的问题是:
- 为什么用 %lf 可以打印双精度值?
- 为什么用 %f 可以打印双精度数?
- 哪一种更好、更正确地使用?
对于可变参数函数,例如printf
and scanf
,参数会被提升,例如,任何较小的整数类型都会被提升为int
, float
被提升为double
.
scanf
接受指针参数,因此提升规则不起作用。它必须使用%f
for float*
and %lf
for double*
.
printf
永远不会看到float
争论,float
总是被提升为double
。格式说明符是%f
。但C99也说%lf
是相同的%f
in printf
:
C99 §7.19.6.1 该fprintf
功能
l
(ell) 指定以下d
, i
, o
, u
, x
, or X
转换说明符适用于long int
or unsigned long int
争论;表示以下n
转换说明符适用于指向 a 的指针long int
争论;表示以下c
转换说明符适用于wint_t
争论;表示以下s
转换说明符适用于指向 a 的指针wchar_t
争论;或者对后续没有影响a
, A
, e
, E
, f
, F
, g
, or G
转换说明符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)