scanf 正在收集错误的输入
scanf is collecting the wrong input
#include<stdio.h>
int main(void)
{
double c;
scanf("%f", &c);
printf("%f", c);
}
这是我正在尝试编写的程序的摘录,但我对这么简单的东西也遇到了同样的问题。当我 运行 并输入“1.0”时,它会打印出“0.007812”。我看了几个与我相似的问题,但找不到合适的答案。
您需要使用 "%lf"
双倍。
这是来自 clang 编译器的警告。
warning: format specifies type 'float *' but the argument has type 'double *' [-Wformat]
scanf("%f", &c);
这里是scanf reference。它的格式是%[*][width][length]specifier
。 'floating point number' 的说明符是 f
。所以我们用%f
读float x
。要读取 double x
,我们需要将长度指定为 l
。组合格式为 %lf
.
"%f" 是双精度数的(或至少一种)正确格式。 float 没有格式,因为如果你试图将 float 传递给 printf,它会在 printf 接收它之前被提升为 double1。 “%lf”在当前标准下也是可以接受的——l 被指定为如果后跟 f 转换说明符(以及其他)则无效。
请注意,这是 printf 格式字符串与 scanf(和 fscanf 等)格式字符串显着不同的地方。对于输出,您正在传递一个值,当作为可变参数传递时,该值将从 float 提升为 double。对于输入,您传递的是一个未提升的指针,因此您必须告诉 scanf 您想要读取浮点数还是双精度数,因此对于 scanf,%f 表示您想要读取浮点数,%lf 表示您想要读取一个双精度(并且,对于它的价值,对于一个长双精度,您将 %Lf 用于 printf 或 scanf)。
the output尝试使用 %lf 而不是 %f
#include<stdio.h>
int main()
{
double c;
scanf("%lf",&c);
printf("%lf",c);
return 0;
}
您使用的是 %f,它用于常规 float 数据类型。
由于您指定了 double ,因此您需要使用 %lf ,它是长浮点数。它读一个双。
希望对你有帮助。
#include<stdio.h>
int main(void)
{
double c;
scanf("%f", &c);
printf("%f", c);
}
这是我正在尝试编写的程序的摘录,但我对这么简单的东西也遇到了同样的问题。当我 运行 并输入“1.0”时,它会打印出“0.007812”。我看了几个与我相似的问题,但找不到合适的答案。
您需要使用 "%lf"
双倍。
这是来自 clang 编译器的警告。
warning: format specifies type 'float *' but the argument has type 'double *' [-Wformat] scanf("%f", &c);
这里是scanf reference。它的格式是%[*][width][length]specifier
。 'floating point number' 的说明符是 f
。所以我们用%f
读float x
。要读取 double x
,我们需要将长度指定为 l
。组合格式为 %lf
.
"%f" 是双精度数的(或至少一种)正确格式。 float 没有格式,因为如果你试图将 float 传递给 printf,它会在 printf 接收它之前被提升为 double1。 “%lf”在当前标准下也是可以接受的——l 被指定为如果后跟 f 转换说明符(以及其他)则无效。
请注意,这是 printf 格式字符串与 scanf(和 fscanf 等)格式字符串显着不同的地方。对于输出,您正在传递一个值,当作为可变参数传递时,该值将从 float 提升为 double。对于输入,您传递的是一个未提升的指针,因此您必须告诉 scanf 您想要读取浮点数还是双精度数,因此对于 scanf,%f 表示您想要读取浮点数,%lf 表示您想要读取一个双精度(并且,对于它的价值,对于一个长双精度,您将 %Lf 用于 printf 或 scanf)。
the output尝试使用 %lf 而不是 %f
#include<stdio.h>
int main()
{
double c;
scanf("%lf",&c);
printf("%lf",c);
return 0;
}
您使用的是 %f,它用于常规 float 数据类型。 由于您指定了 double ,因此您需要使用 %lf ,它是长浮点数。它读一个双。 希望对你有帮助。