小编典典

printf 中 double 的正确格式说明符

all

doubleprintf中正确的格式说明符是什么?是%f%lf?我相信是%f,但我不确定。

代码示例

#include <stdio.h>

int main()
{
   double d = 1.4;
   printf("%lf", d); // Is this wrong?
}

阅读 167

收藏
2022-03-08

共1个答案

小编典典

"%f"是(或至少一种)双精度的正确格式。a 没有格式, 因为float如果您尝试将 a
传递floatprintf,它将在收到它double之前被提升为1。在当前标准下也是可以接受的——如果后面跟着转换说明符(等等)
,则被指定为无效。printf``"%lf"``l``f

请注意,这是格式字符串与(和等)格式printf字符串有很大不同的地方。对于输出,您正在传递一个 value
,当作为可变参数传递时,它将被提升为to 。对于输入,您传递的是未提升的 指针 ,因此您必须确定是要读取 a还是 a ,因此 for表示您要读取
a并且意味着您要读取 a (并且,它是什么值得,对于 a ,您使用for或)。scanf``fscanf float``double
scanf``float``double``scanf``%f``float``%lf``double``long double``%Lf``printf``scanf


1.C99,搂6.5.2.2/6:“如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并且将浮点类型的参数提升为双精度。这些被称为默认参数提升。”
在 C++ 中,措辞有些不同(例如,它不使用“原型”一词),但效果是一样的:所有可变参数在被函数接收之前都经过默认提升。

2022-03-08