C++ C++;0x printf()为双精度打印错误的值

C++ C++;0x printf()为双精度打印错误的值,c++,c++11,printf,double,C++,C++11,Printf,Double,今天我试图用%lf说明符用printf函数打印double值,但我得到了0.000000。但是当我试图用%f说明符打印相同的内容时,我得到了正确的输出。为什么会这样?我使用c++0x(c++11我想。) #包括 int main() { 双aaa; aaa=1.23; printf(“%lf\n”,aaa); printf(“%f\n”,aaa); 返回0; } 也许这个答案并不完全正确,但是根据,看起来%l是长int的长度说明符,%f是浮点的说明符。也许在过去,这可以打印浮点变量,但我猜您的

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

#包括
int main()
{
双aaa;
aaa=1.23;
printf(“%lf\n”,aaa);
printf(“%f\n”,aaa);
返回0;
}

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

来自C99:

转换说明符及其含义如下:

f、 f-表示浮点数的双参数

长度修饰符及其含义如下:

l(ell)。。。对以下a、a、e、e、f、f、g或g转换没有影响 说明符


因此,两个调用的效果必须相同。(编译器bug?旧编译器?)/P>似乎有用:用C编译器,用C++编译程序。我的编译器用C++编译它。harald@harald哪一部分不是C++?你确定你没有使用C89吗?printf()是未定义的行为,特别是在C89中,但通常
%lf
被视为
%f
。然而,通常并不意味着总是。@Zéychin我想我没有使用C89。无论如何,我怎样才能检查哪个编译器在代码块10.05中运行?我怀疑OP是在链接Windows C库,它有一个非标准(在C99中,在C89中是兼容的)
printf
实现
%lf
需要一个
长双精度
值。请参阅。您链接到的引用是错误的。那个网站有很多错误
%lf
对于打印
float
double
@M.M是正确的,谢谢您让我知道。C++文档中使用什么引用?A,或者他使用VisualStudio编译器在C++模式下使用;根据MSDN% LF的意思是“长双”:“C++”标准规定,C++库中的函数与ISOC99中的函数一样,除非另有说明(并且没有关于printf族的其它注释)。非常感谢。
#include<stdio.h>

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