【问题标题】:Format specifier %Lf is giving errors for `long double` variables格式说明符 %Lf 为“long double”变量提供错误
【发布时间】:2020-10-03 04:27:40
【问题描述】:

我收到以下错误:

In function 'main':
[Warning] unknown conversion type character 'L' in format [-Wformat=]
[Warning] too many arguments for format [-Wformat-extra-args]

In function 'error_user':
[Warning] unknown conversion type character 'L' in format [-Wformat=]
[Warning] too many arguments for format [-Wformat-extra-args]

在下面的代码中:

#include <stdio.h>
#include <stdlib.h>

void error_user (long double *error);

int main(void)
{
    long double error;

    printf("What error do you want?\n");

    error_user (&error);

    printf("%Lf\n", error);

    return 0;
}

void error_user (long double *error)
{
    scanf("%Lf", error);
}

据我所知,long double 的格式说明符是%Lf,所以不太确定如何解决这个问题。谢谢!

DEV-C++ 中使用 TDM-GCC 4.9.2 64-bit Release 编译。

【问题讨论】:

    标签: c format dev-c++ long-double tdm-gcc


    【解决方案1】:

    您的编译器无法识别%Lf,您需要提供编译器标志-D__USE_MINGW_ANSI_STDIO=1

    例子:

    $ gcc filename.c -Wall -Wextra -pedantic -O3 -D__USE_MINGW_ANSI_STDIO=1
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    当您使用Dev-C++ 时,您可能还应该添加-std=c11 标志以启用C11 标准。

    这个帖子解释了你应该如何向Dev-C++添加标志:

    How to change mode from c++98 mode in Dev-C++ to a mode that supports C++0x (range based for)?

    因此您需要使用链接线程中的说明添加标志-std=c11-D__USE_MINGW_ANSI_STDIO=1

    由于 Dev-C++ 使用较旧的标准,因此可能只添加 -std=c11 可以解决问题。先试试吧。

    【讨论】:

    • 嘿@anastaciu 另外,即使警告不再出现(现在我还添加了-std=c11),我仍然想知道该变量是否实际上被视为long double。我之所以问是因为当我输入一个超过 6 位小数的值时,即 0.00000000001 我仍然得到一个 6 位小数输出:0.000000
    • @Henry,默认的 declmal 位置数是 6,您需要增加它,%.12Lf
    • 对,所以格式说明符允许您告诉编译器分配X 的内存量,这并不一定会影响正在存储的小数位数。为此,您实际上需要使用前缀.12 进一步指定它,从而得到%.12Lf。那是正确的@anastaciu 吗?
    • @Henry。前缀只能用于printf而不是scanf,内存大小由类型定义,前缀.12只是表示您需要打印12位小数而不是默认的6位。
    • 一切都清楚了,非常感谢@anastaciu 的大力帮助!!! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多