格式说明符 %Lf 为 `long double` 变量给出错误

Format specifier %Lf is giving errors for `long double` variables

我收到以下错误:

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 编译

您的编译器无法识别 %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 即可解决问题。先试试。