我正在使用 Scanf 编写代码,我希望它同时接受三个不同的输入,使用这些输入执行一些计算并给我一个输出,但它没有按我的预期工作。 首先,它只采用一个函数,并且还在输入位置旁边显示值,即 100、200 和 500,您将看到这些值,请帮我澄清一下。 代码是;
# include<stdio.h>
int main () {
//input
double a=100,b=200,c=500;
int d,e,f;
printf("Please enter the number of coins you have for each denomination below\n");
printf("If you have no coins in that denomination input zero.\n");
scanf("100s:%lf",&d);
scanf("200s;%lf",&e);
scanf("500s:%lf",&f);
//computation
double g=(double)((a*d)+(b*e)+(c*f));
//output
printf("Change is shs:%lf",g);
}
我期望我的终端显示以下内容:
100秒:
200s:
500秒:
然后
改变是shs:
但事实并非如此
我期望我的终端显示以下内容:
100秒:
200s:
500秒:
显然,您期望
scanf()
在读取输入之前向终端生成输出(100s:
、200s:
、500s:
)。 scanf
不这样做。它只是一个输入功能。 如果您想打印提示,请使用 output 函数,例如 printf
。
此外,您提供的用于存储转换后的输入的指针必须与格式中的转换说明符类型匹配。
%lf
应与指向 double
的指针匹配,但您将其与指向 int
的指针匹配。 如果您想输入有符号整数,请使用说明符 %d
,如果您想输入十进制浮点数,则将变量类型切换为 double
。
例如,
double d, e, f;
// ...
printf("100s:");
fflush(stdout); // flush the output buffer so the prompt is shown right away
scanf("%lf",&d);
此外,您可能需要在最后一个
\n
的格式末尾添加 printf()
。 否则,程序输出末尾和下一个 shell 提示符之间不会有换行符。