scanf GCC for long double

时间:2015-06-20 06:01:37

标签: c gcc

我在Windows 7上使用gcc 4.8.1和std = c99。使用scanffscanf时,使用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; 
}

1 个答案:

答案 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 ++实现。