以下代码段的输出为0.000000。请告诉我原因。
#include <stdio.h>
main()
{
printf("%f\n",123.456789l);
}
我在Linux中使用GCC 4.9(Debian 8.3)。
答案 0 :(得分:2)
printf的%f
格式需要一个简单的双倍。对于长双倍,您需要%Lf
。 (那是大写字母L.)
很难确切地说为什么你得到了0.000,但是当你将一种类型(long double)传递给期望别的东西(%f
,普通的双倍)的格式说明符时,你几乎永远不会得到你想要的东西。
这是新编译器真正有用的一件事。当我尝试你的代码时,我的gcc(4.6.3)副本和你的一样沉默,但clang说“警告:格式指定类型'double'但是参数类型为'long double'”,我很确定更新版本的gcc也会抱怨。