wyz20010429 发表于 2021-8-27 11:30:53

double,longdouble除了范围的区别

同样的程序,为什么double执行正确,而longdouble执行错误。求大佬解释{:10_254:}

人造人 发表于 2021-8-27 11:30:54

long double 和 double 的输出格式是不一样的
在我这边是 Lf 和 lf

#include<stdio.h>

int main()
{
    int r;
    double c,s;
    r=5;
    c=2*3.14*r;
    s=3.14*r*r;
    printf("c=%6.2lf,s=%6.2lf",c,s);

    return 0;
}

#include<stdio.h>

int main()
{
    int r;
    long double c,s;
    r=5;
    c=2*3.14*r;
    s=3.14*r*r;
    printf("c=%6.2Lf,s=%6.2Lf",c,s);

    return 0;
}

人造人 发表于 2021-8-27 11:37:01

发代码

wyz20010429 发表于 2021-8-27 11:47:57

人造人 发表于 2021-8-27 11:37
发代码

#include<stdio.h>

int main()
{
        int r;
        long double c,s;
        r=5;
        c=2*3.14*r;
        s=3.14*r*r;
        printf("c=%6.2Lf,s=%6.2Lf",c,s);
       
        return 0;
}

wyz20010429 发表于 2021-8-27 11:48:28

人造人 发表于 2021-8-27 11:37
发代码

这个是longdouble的那个

逃兵 发表于 2021-8-27 11:49:30

文件开头加个这个试试
#define _USE_MINGW_ANSI_STDIO 1

wyz20010429 发表于 2021-8-27 12:11:19

人造人 发表于 2021-8-27 12:00


感谢感谢{:10_254:}

wyz20010429 发表于 2021-8-27 12:11:53

逃兵 发表于 2021-8-27 11:49
文件开头加个这个试试

谢谢,兵哥

wyz20010429 发表于 2021-8-27 12:18:58

人造人 发表于 2021-8-27 11:37
发代码

但是大佬你运行下你发的下面那个代码,我试了下结果依据是0,

人造人 发表于 2021-8-27 12:23:38

wyz20010429 发表于 2021-8-27 12:18
但是大佬你运行下你发的下面那个代码,我试了下结果依据是0,

在我这边 long double 没问题,但是 double 什么都不显示
$ cat main.c
#include<stdio.h>

int main()
{
    int r;
    long double c,s;
    r=5;
    c=2*3.14*r;
    s=3.14*r*r;
    printf("c=%6.2Lf,s=%6.2Lf",c,s);

    return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main
c= 31.40,s= 78.50$ vim main.c
$ cat main.c
#include<stdio.h>

int main()
{
    int r;
    double c,s;
    r=5;
    c=2*3.14*r;
    s=3.14*r*r;
    printf("c=%6.2Lf,s=%6.2Lf",c,s);

    return 0;
}
$ gcc -g -Wall -o main main.c
main.c: In function ‘main’:
main.c:10:20: warning: format ‘%Lf’ expects argument of type ‘long double’, but argument 2 has type ‘double’ [-Wformat=]
   10 |   printf("c=%6.2Lf,s=%6.2Lf",c,s);
      |               ~~~~~^         ~
      |                  |         |
      |                  long double double
      |               %6.2f
main.c:10:29: warning: format ‘%Lf’ expects argument of type ‘long double’, but argument 3 has type ‘double’ [-Wformat=]
   10 |   printf("c=%6.2Lf,s=%6.2Lf",c,s);
      |                        ~~~~~^    ~
      |                           |    |
      |                           |    double
      |                           long double
      |                        %6.2f
$ ./main
$

wyz20010429 发表于 2021-8-27 12:31:42

人造人 发表于 2021-8-27 12:23
在我这边 long double 没问题,但是 double 什么都不显示

啊,估计是我编译器的问题了,我的是DeV-C++可能这里有点bug

人造人 发表于 2021-8-27 12:33:02

wyz20010429 发表于 2021-8-27 12:31
啊,估计是我编译器的问题了,我的是DeV-C++可能这里有点bug

不是编译器的问题,是你用的输出格式不对,不知道在你那边的输出格式应该是什么

wyz20010429 发表于 2021-8-27 12:34:56

人造人 发表于 2021-8-27 12:33
不是编译器的问题,是你用的输出格式不对,不知道在你那边的输出格式应该是什么

我的无论是Lf还是lf,只要是longdouble就运行为0

wyz20010429 发表于 2021-8-27 12:35:36

人造人 发表于 2021-8-27 12:33
不是编译器的问题,是你用的输出格式不对,不知道在你那边的输出格式应该是什么

用double的话,lf还是Lf都运行正确结果

人造人 发表于 2021-8-27 12:44:55

wyz20010429 发表于 2021-8-27 12:34
我的无论是Lf还是lf,只要是longdouble就运行为0

那就不知道了,不知道你那边的 long double 是什么格式

逃兵 发表于 2021-8-27 12:54:14

人造人 发表于 2021-8-27 12:44
那就不知道了,不知道你那边的 long double 是什么格式

人造人 发表于 2021-8-27 13:18:45

逃兵 发表于 2021-8-27 12:54


用命令行编译,看看 gcc 有什么提示
gcc -g -Wall -o main main.c

逃兵 发表于 2021-8-27 13:41:14

人造人 发表于 2021-8-27 13:18
用命令行编译,看看 gcc 有什么提示

demo.c: In function 'main':
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
   printf("c=%6.2Lf,s=%6.2Lf",c,s);
            ^
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
demo.c:10:12: warning: too many arguments for format [-Wformat-extra-args]
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
demo.c:10:12: warning: too many arguments for format [-Wformat-extra-args]

人造人 发表于 2021-8-27 14:03:24

逃兵 发表于 2021-8-27 13:41


把 Lf 改成 f 然后
gcc -g -Wall -o main main.c

逃兵 发表于 2021-8-27 14:22:23

人造人 发表于 2021-8-27 14:03
把 Lf 改成 f 然后
gcc -g -Wall -o main main.c

demo.c: In function 'main':
demo.c:11:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'long double' [-Wformat=]
   printf("c=%6.2f,s=%6.2f\n",c,s);
            ^
demo.c:11:12: warning: format '%f' expects argument of type 'double', but argument 3 has type 'long double' [-Wformat=]
demo.c:11:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'long double' [-Wformat=]
demo.c:11:12: warning: format '%f' expects argument of type 'double', but argument 3 has type 'long double' [-Wformat=]
页: [1] 2
查看完整版本: double,longdouble除了范围的区别