Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 长双精度未知转换类型字符L的Printf_C++_Windows_Gcc_Gcc Warning - Fatal编程技术网

C++ 长双精度未知转换类型字符L的Printf

C++ 长双精度未知转换类型字符L的Printf,c++,windows,gcc,gcc-warning,C++,Windows,Gcc,Gcc Warning,我的程序非常简单: #include <iostream> #include <stdio.h> using namespace std; int main() { long double a = 4.5; printf("%Lg", a); return 0; } 控制台中的输出是 -1.28823e-231 文档对打印长双精度非常清楚,它简单地说明了此格式的正确参数是L。我做错了什么?我使用的是Windows10下的代码块,mingw3

我的程序非常简单:

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    long double a = 4.5;
    printf("%Lg", a);
    return 0;
}
控制台中的输出是

-1.28823e-231
文档对打印长双精度非常清楚,它简单地说明了此格式的正确参数是L。我做错了什么?我使用的是Windows10下的代码块,mingw32-g++编译器


注意:cout产生相同的输出。

您有一个编译器问题:

mingw使用Microsoft C运行时库,它们的printf实现不支持“long double”类型。作为一种变通方法,您可以将其转换为“double”,并将其传递给printf

因此,您需要
double-double

按照C99/C11标准(IEC 60559浮点算术(附录F))的规定,在x86体系结构上,大多数C编译器实现长双精度,作为x86硬件支持的80位扩展精度类型(有时存储为12或16字节以保持数据结构对齐)。一个例外是微软Visual C++为X86,这使得长双是同义词。(2)微软Windows上的英特尔C++编译器支持扩展精度,但是需要/Qlong双开关长双倍以对应硬件的扩展精度格式。[3 ] < /P> 不要使用
printf()
,而应使用
std::cout
并结合使用,例如:

#include  <iostream>
std::cout << "scientific: " << std::endl << std::scientific << a;
#包括

标准::gcc 6.2.1没有问题。可能此编译器不支持
printf
long-double
转换。你可以通过写C++代码而不是C代码来避免这个问题,并且使用<代码>你的代码编译得很好。我编译了它,输出是正确的。尝试使用不同的compiler@user16320科学:4.500000e+00是程序的输出,使用cpp11标志在cpp.sh上测试。你使用什么C++标志?什么是C++标志?我用的是代码块。我是个笨蛋。我甚至不能使用命令行。好吧,我安装了另一个名为mingw64的编译器,它甚至可以与cout一起工作。问题已解决。@user16320如果您是好奇型的人,请参阅编辑,了解您为什么会遇到问题。
#include  <iostream>
std::cout << "scientific: " << std::endl << std::scientific << a;