Code::Blocks 无法识别简单 C 程序中的双标识符 (%lf)

Code::Blocks does not recognise double identifier (%lf) in a simple C program

今天我决定回顾一下 C 编程语言的基础知识,我在 Code::Blocks IDE 中遇到了这个小问题:当我使用 %f 格式标识符来读写十进制数一切顺利,但是当我切换到 %lf 格式标识符时,它没有正确读取或写入数字。

这是我的代码:

#include <stdio.h>

int main()
{
    double x;
    scanf("%lf", &x);
    printf("x = %lf", x);
    return 0;
}

这是输出:

这些是 Code::Blocks 菜单中的编译器设置:

我已经在网上搜索了解决方案,包括 Code::Blocks 论坛,但没有找到任何相关内容。我不确定是编译器问题还是 IDE 问题。如果您知道解决方法或对此问题有解释,请帮助我。我很确定其他人也遇到过这种情况。

不清楚 Code::Blocks 警告的内容。 scanf 格式字符串中的 lf 也带有下划线,但绝对正确,因为目标变量的类型为 double.

对于 printfl 修饰符是不必要的,但应该被 printf 忽略。 float 值在传递给 printf 等可变参数函数时会转换为 double,因此 %f 接受 floatdouble 值,而 long double 值需要 L 修饰符。

建议的更正似乎表明 Code::Block 尝试将某种拼写检查程序应用于字符串常量内容,而不管 printfscanf 格式字符串中的转换说明符如何。

我建议您将 printf 格式字符串更改为 printf("x = %f\n", x); 以完全符合。

您还应该将编译器配置为更高的警告级别(-Wall -W-Weverything)以启用 printfscanf 格式字符串验证。

感兴趣的人可以在本帖中更详细地描述该问题:
Correct format specifier for double in printf