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
.
对于 printf
,l
修饰符是不必要的,但应该被 printf
忽略。 float
值在传递给 printf
等可变参数函数时会转换为 double
,因此 %f
接受 float
和 double
值,而 long double
值需要 L
修饰符。
建议的更正似乎表明 Code::Block 尝试将某种拼写检查程序应用于字符串常量内容,而不管 printf
和 scanf
格式字符串中的转换说明符如何。
我建议您将 printf
格式字符串更改为 printf("x = %f\n", x);
以完全符合。
您还应该将编译器配置为更高的警告级别(-Wall -W
或 -Weverything
)以启用 printf
和 scanf
格式字符串验证。
感兴趣的人可以在本帖中更详细地描述该问题:
Correct format specifier for double in printf
今天我决定回顾一下 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
.
对于 printf
,l
修饰符是不必要的,但应该被 printf
忽略。 float
值在传递给 printf
等可变参数函数时会转换为 double
,因此 %f
接受 float
和 double
值,而 long double
值需要 L
修饰符。
建议的更正似乎表明 Code::Block 尝试将某种拼写检查程序应用于字符串常量内容,而不管 printf
和 scanf
格式字符串中的转换说明符如何。
我建议您将 printf
格式字符串更改为 printf("x = %f\n", x);
以完全符合。
您还应该将编译器配置为更高的警告级别(-Wall -W
或 -Weverything
)以启用 printf
和 scanf
格式字符串验证。
感兴趣的人可以在本帖中更详细地描述该问题:
Correct format specifier for double in printf