prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.9

有人告诉我使用%lfprintf是不对的。如何printf使用%f用于类型double,如果scanf需要%lf?


A确实如此,printf%f%f说明符同时适用于floatdouble参数。[脚注] 由于“默认参数提升”(适用于可变参数列表 [脚注],例如printf,无论原型是否在作用域内),类型的值float被提升为double,而printf因此只看到doubles。(printf确实接受%Lf,用于long double。)另请参阅问题 15.2

scanf另一方面,接受指针,并且不适用任何此类提升。存储到float(通过指针)与存储到double,所以scanf区分%f%lf.

这里有一个表格,列出了期望的参数类型printfscanf对于各种格式说明符

[此处放置表格]

(严格来说,%lf在...下未定义printf,尽管许多系统可能接受它。为了可移植性,请始终使用%f.)

另请参阅问题 12.13

参考:K&R1 第 7.3 节第 145-47 页,第 7.4 节第 147-50 页
K&R2 第 7.2 节第 153-44 页,第 7.4 节第 157-59 页
ISO 第 7.9.6.1 节,第 7.9.6.2 节
H&S 第 15.8 节第 357-64 页,第 15.11 节第 366-78 页
CT&P 第 A.1 节第 121-33 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管