为什么%lf不能在printf中使用双精度但是%f呢?

时间:2017-10-26 12:12:55

标签: c printf double format-specifiers

当我编译并运行以下代码片段时,输出为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是双打的格式说明符,所以第一个代码段不应该与第二个代码段具有相同的输出吗?

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

我正在使用代码块作为IDE,并且我使gcc编译器遵循1999年的C标准。可能的重复说我的代码应该按照C99标准工作,我的编译器如下,但我的代码不起作用。因此,副本中的答案并不能解决我的问题。

1 个答案:

答案 0 :(得分:1)

引用C11,章节§7.21.6.1/第7段(强调我的)[和章节§7.19.6.1,C99,如果你有兴趣的话]

  

长度修饰符及其含义为:

     

[.....]

     

l (ell)

     

指定以下diouxX转换说明符适用于   long intunsigned long int参数;以下n   转换说明符适用于指向long int参数的指针;那个   以下c转换说明符适用于wint_t参数;那个   以下s转化说明符适用于指向wchar_t的指针   参数; 或对以下aAeEfF,{{1}无效}或g转化   说明符。

如果编译器不遵守此规则,则编译器一致性存在问题。

您的代码很好,两个代码段完全相同。

See live here