我在Windows 7上使用gcc 4.8.1和std = c99。使用scanf
和fscanf
时,使用long double的正确占位符是什么?我尝试了%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;
}
答案 0 :(得分:1)
对于我来说,它在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(或Mac OSX),我假设您使用的是与已安装的gcc匹配的libc。
<强>无论其强>
如果您在Windows上使用GCC和MinGW,则会出现问题:
scanf not taking in long double
Dev-c ++使用MinGW,它使用gcc编译器和Microsoft 运行时库。不幸的是,这些组件不同意 用于long double的基础类型(64对80或96位,I 认为)。 Windows假设long double与double的大小相同; GCC 使双倍大。
任一选项都有效,但组合导致C和 C ++实现。