scanf GCC用于长双精度

scanf GCC用于长双精度,c,gcc,C,Gcc,我在Windows7上使用GCC4.8.1和std=c99。使用scanf和fscanf时,长双精度的正确位置是什么?我试过%lf和%lf,但都不起作用。编译命令是gcc-std=c99 main.c-o main.exe。当我省略std=c99时,它可以正常工作 #include <stdlib.h> #include <stdio.h> int main() { long double x = 0; scanf("%Lf", &x);

我在Windows7上使用GCC4.8.1和std=c99。使用
scanf
fscanf
时,长双精度的正确位置是什么?我试过%lf和%lf,但都不起作用。编译命令是gcc-std=c99 main.c-o main.exe。当我省略
std=c99
时,它可以正常工作

#include <stdlib.h>
#include <stdio.h>
int main()
{
    long double x = 0;
    scanf("%Lf", &x); 
    printf("x = %Lf\n", x); 
    return 0; 
}
#包括
#包括
int main()
{
长双x=0;
扫描频率(“%Lf”、&x);
printf(“x=%Lf\n”,x);
返回0;
}

在Centos 6.6上,无论有无-std=c99,它都可以正常工作:

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Copyright (C) 2010 Free Software Foundation, Inc.

$ gcc x.c -o x -std=c99 -Wall -pedantic
$ ./x
123.456
x = 123.456000

$ gcc x.c -o x  -Wall -pedantic
$ ./x
123.456
x = 123.456000
我假设您使用的是Linux(或MacOSX),并且我假设您使用的libc与安装的gcc相匹配

但是

如果在Windows上将GCC与MinGW一起使用,则会出现以下问题:

Dev-c++使用MinGW,MinGW使用gcc编译器和Microsoft 运行库。不幸的是,这些组成部分在原则上存在分歧 用于长双精度(64对80或96位,I 思考)。Windows假定长双精度与双精度大小相同;海湾合作委员会 使长双更大

这两种选择都是有效的,但组合会导致C和 C++实现。
编辑您的问题以显示确切的源代码和编译命令。记住测试返回值-扫描项目的数量-从您使用
gcc-std=c99-Wall-g编译的原因?你是如何运行你的程序的?为什么不测试
scanf
(例如
if(scanf(“%Lf”)和&x)的结果编译命令:
gcc-std=c99 main.c-o main.exe
。当我不使用
std=c99
时,它工作正常。但是你应该测试
scanf
的结果,你说它不工作是什么意思?你得到了什么输出?我在windows上。我会编辑这个问题。好的,然后。这里是:“mingwrt-3.15以后的[*]提供完全符合ANSI标准的printf()。但是,默认情况下不会使用它,除非您使用
-ANSI
-posix
或JonY建议的
-D_uuse_MINGW_ANSI_STDIO
进行编译。只是厌倦了所有这些功能。没有任何功能:(请:1)验证您是否具有mingwrt或更高版本(请记住:MINGW位于GCC的顶部;它们是不同的);2)考虑尝试<代码> -DyuSuxMiWangAsiSyStdio=1 < /代码>,3)考虑添加<代码> *定义PrrtfFixMiWyPrimtf