gpt4 book ai didi

c - 为什么 %lf 不能在 printf 中使用 double ,但 %f 可以?

转载 作者:行者123 更新时间:2023-11-30 14:54:01 25 4
gpt4 key购买 nike

当我编译并运行以下代码片段时,输出为 0.000000。

#include <stdio.h>

int main(void)
{
double a = 1.4;

printf("%lf", a);

return 0;
}

当我编译并运行这段代码时,输​​出为 1.400000,正如我预期的第一个代码段一样。

#include <stdio.h>

int main(void)
{
double a = 1.4;

printf("%f", a);

return 0;
}

为什么会出现这样的情况呢? %lf 是 double 的格式说明符,因此第一个片段不应该与第二个片段具有相同的输出吗?

有人问了类似的问题( Correct format specifier for double in printf ),但根据最上面的答案,这两个片段应该产生相同的输出,因为“如果后跟 f 转换说明符(除其他外),则 l 被指定为无效”(引自第一个答案)。

我使用代码块作为 IDE,并且我使 gcc 编译器遵循 1999 年的 C 标准。如下,但我的代码不起作用。因此,重复中的答案并不能解决我的问题。

最佳答案

引用 C11,第 §7.21.6.1 章/第 7 段(强调我的)[以及第 §7.19.6.1 章,C99,如果您感兴趣的话]

The length modifiers and their meanings are:

[.....]

l (ell)

Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long int or unsigned long int argument; that a following n conversion specifier applies to a pointer to a long int argument; that a following c conversion specifier applies to a wint_t argument; that a following s conversion specifier applies to a pointer to a wchar_t argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion specifier.

如果你的编译器不遵守这一点,那就是编译器一致性问题。

您的代码很好,两个片段都是相同的。

See live here

关于c - 为什么 %lf 不能在 printf 中使用 double ,但 %f 可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954042/

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