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

标签 c printf double scanf codeblocks

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

这是我的代码:

#include <stdio.h>

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

enter image description here

这是输出:
enter image description here

这些是 Code::Blocks 菜单中的编译器设置: enter image description here

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

最佳答案

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

对于 printfl 修饰符是不必要的,但应该被 printf 忽略。 float 值在传递给 vararg 函数(例如 printf)时被转换为 double,因此 %f 接受这两个 floatdouble 值,而 long double 值需要 L 修饰符。

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

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

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

关于Code::Blocks 无法识别简单 C 程序中的双重标识符 (%lf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234587/

相关文章:

Python OpenSSL C 扩展 : undefined symbol: AES_set_encrypt_key

c - 在 C 中浏览数组

c - 在嵌入式 C 中将 float 与 sprintf() 一起使用

java - 类型不匹配 : can't convert from double to int java

java - Android应用程序一启动就崩溃

c - 使用 MPI 进行矩阵乘法

C - 非左值数组的无效使用

c - 模仿printf

matlab - 使用 sprintf 打印具有可变数量元素的向量

double - 双类型的 OpenCL 问题