gpt4 book ai didi

printf 中 double 的正确格式说明符

转载 作者:太空狗 更新时间:2023-10-29 16:13:32 24 4
gpt4 key购买 nike

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

代码示例

#include <stdio.h>

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

最佳答案

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

请注意,这是 printf 格式字符串与 scanf(和 fscanf 等)格式字符串有很大不同的地方。对于输出,您将传递一个,当作为可变参数传递时,它将从float 提升为double。对于输入,您正在传递一个未提升的指针,因此您必须告诉scanf 您是想读取float 还是a double,所以对于scanf%f 意味着你想读取一个float%lf 意味着你想读取一个 double(而且,对于它的值(value),对于一个 long double,你可以使用 %Lf printfscanf)。


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

关于printf 中 double 的正确格式说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4264127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com