2013-11-03 66 views
0

我在Windows 64位平台上为C/C++代码使用Code :: Blocks 12.11。我最近遇到了这个程序意想不到的结果。Code :: Blocks在使用long double时出现错误结果

#include <stdio.h> 
int main() 
{ 
    long double number; 
    number = 1.1234567; 
    printf("%llf\n",number); 
    return 0; 
} 

它应该打印输出1.1234567,但它给-0.000000,我发现它总是给出错误的值,当我使用长双。此代码在ideone http://ideone.com/Opu8cy上正常工作,请告诉我是否有解决此问题的方法。

回答

1

您应该使用格式%Lf,而不是%llf

也有可能存在其中

number = 1.1234567L; 

可以帮助一个错误。

PRINTF(3)

ll  (ell-ell). A following integer conversion corresponds to a 
      long long int or unsigned long long int argument, or a 
      following n conversion corresponds to a pointer to a long long 
      int argument. 

    L  A following a, A, e, E, f, F, g, or G conversion corresponds 
      to a long double argument. (C99 allows %LF, but SUSv2 does 
      not.) 

此外,在代码::块,你应该去设置 - >编译器和调试器...和警告的调补平。 (最好为高电平)

你也许不使用GCC(MinGW的等) - 但如果使用-Wall -Wextra -pedantic +一些-std=xxx或看答案像this one - 但你的编译器。

+0

我正在使用** GCC 4.7 mingw编译器**。使用%Lf和数字= 1.1234567L后,我得到相同的-0.000000结果。我还添加了** - Wall -Wtratra -pedantic-errors **,现在它显示了几条警告消息'1。未知的转换类型字符'L'格式为[-Wformat]和2.格式太多的参数[-Wformat-extra-args]'添加std = c99后我得到正确的结果没有任何警告,任何人都可以告诉哪个c标准代码::块默认情况下如下。非常感谢您的建议** Sukminder **。 –

+0

@AtulKumarVerma:看起来像mingw [长双倍的麻烦](http://stackoverflow.com/questions/1764350/conversion-specifier-of-long-double-in-c) – Runium

相关问题