C ++ 0x printf()为double打印错误值

时间:2016-02-04 18:03:54

标签: c++ c++11 printf double

今天我尝试使用double说明符使用printf函数打印%lf值,但我得到0.000000。但是当我尝试用%f说明符打印相同的东西时,我得到了正确的输出。为什么会这样?我使用 c ++ 0x (我认为 c ++ 11 。)

#include<stdio.h>

int main()
{
    double aaa;
    aaa=1.23;
    printf("%lf\n",aaa);
    printf("%f\n",aaa);
    return 0;
}

enter image description here

2 个答案:

答案 0 :(得分:2)

也许这个答案并不完全正确,但根据this reference%l看起来是long int的长度说明符,%f是说明符为float。也许在过去这可以打印浮点变量,但我猜你的代码试图将双变量aaa视为long int,并将结果打印为0。

答案 1 :(得分:1)

来自C99:

  

转换说明符及其含义为:

     

f,F - 表示浮点数的双参数

  

长度修饰符及其含义为:

     

l(ell) - ...对后续a,A,e,E,f,F,g或G转换没有影响   说明符。

因此两个电话的效果必须相同。 (编译器错误?旧编译器?)