【问题标题】:LDBL_MIN returns 0, LDBL_MAX returns #QNAN in CLDBL_MIN 返回 0,LDBL_MAX 在 C 中返回 #QNAN
【发布时间】:2018-09-27 19:11:16
【问题描述】:

我正在用 C 语言编写一个简单的程序,它会打印出值、内存中分配的字节数、每种数据的最大值和最小值。实际上,我只是在长双部分方面遇到了问题。 简单地说,它不会打印出我分配给我的 long double 变量的值,函数 sizeof 似乎只有在 printf 函数中单独使用时才能正常工作,LDBL_MIN 值似乎为 0 但我不明白什么我需要使用的类型说明符,LDBL_MAX 值打印出 1.#QNAN。

这是我的代码:

charactersPrinted=printf("\t\t\t--- Long double ---\nValore: %1.6f",x);
printf("\nBytes allocated: %d\n",sizeof(long double));
printf("Minimum value: %g\nMaximum value: %lg\n",LDBL_MIN,LDBL_MAX);
printf("(Characters printed= %d)\n\n\n",charactersPrinted);

【问题讨论】:

标签: c printf


【解决方案1】:

sizeof 是一个运算符,而不是一个函数。

%1.6f 没有多大意义:最小字段宽度为 1 是多余的,因为%f 总是会产生至少一个字符的输出。 6 的精度是多余的,因为这是 %f 的默认值。整件事可以写成%f

%f 采用 double,而不是 long double(应该是 %Lf)。

%d 采用 int,而不是 size_t(应该是 %zu)。

%g 采用 double,而不是 long double(应该是 %Lg)。

%lg 采用 double,而不是 long double(应该是 %Lg)。

参见例如Linux documentation for printf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2015-06-15
    • 2016-10-30
    • 2012-08-13
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多