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++0x(c++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;
}