今天我决定回顾一下 C 编程语言的基础知识,我在我的 Code::Blocks IDE 中遇到了这个小问题:当我使用 %f
格式标识符进行读写时十进制数一切顺利,但是当我切换到 %lf
格式标识符时,它没有正确读取或写入数字。
这是我的代码:
#include <stdio.h>
int main()
{
double x;
scanf("%lf", &x);
printf("x = %lf", x);
return 0;
}
我已经在网上搜索了一个解决方案,包括 Code::Blocks 论坛,但我没有找到任何相关的东西。我不确定是编译器问题还是IDE问题。如果您知道解决方法或对此问题有解释,请帮助我。我很确定其他人也遇到过这种情况。
最佳答案
目前尚不清楚 Code::Blocks 警告的内容。 scanf
格式字符串中的 lf
也带有下划线,但绝对正确,因为目标变量的类型为 double
。
对于 printf
,l
修饰符是不必要的,但应该被 printf
忽略。 float
值在传递给 vararg 函数(例如 printf
)时被转换为 double
,因此 %f
接受这两个 float
和 double
值,而 long double
值需要 L
修饰符。
建议的更正似乎表明 Code::Block 尝试将某种拼写检查器应用于字符串常量内容,而不管 printf
和 scanf
格式中的转换说明符字符串。
我建议您将 printf
格式字符串更改为 printf("x = %f\n", x);
以完全符合。
您还应该将编译器配置为更高的警告级别(-Wall -W
或 -Weverything
)以启用 printf
和 scanf
格式化字符串验证。
关于Code::Blocks 无法识别简单 C 程序中的双重标识符 (%lf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234587/