我刚开始学习C编程语言。我写了这段简单的代码,将美元兑换成欧元。唯一的问题是,一旦输入美元输入,程序就会挂起。我正在使用while循环来询问用户是否要重做操作,所以我的猜测是代码的语法导致了一个永恒的循环,但我不确定。
这是我的代码:
#include<stdio.h>
#define conv 0.787033 //conversion factor of USD to Euro found www.ex.com//
int main(void)
{
float USD, EURO;
char cont = 'y';
while (cont == 'Y' || cont == 'y')
{
printf("Please enter the amount of United States ");
printf("Dollars you wish to convert to Euros\n");
scanf("%f\n", &USD);
EURO = USD * conv;
printf("%.2f dollars is %.2f Euros\n", USD, EURO);
printf("Do you wish to convert another dollar amount (Y/N)?\n");
scanf("%c\n", &cont);
}
return(0);
}
答案 0 :(得分:12)
从\n
scanf
修改强>
上述更改不起作用。 当使用scanf读取输入时,在按下返回键后读取输入,但是返回键生成的换行不被scanf消耗,这意味着下次从标准输入读取时,将准备好读取新行。
要避免的一种方法是使用fgets
将输入作为字符串读取,然后使用sscanf
提取所需内容。
使用换行符的另一种方法是scanf("%c%*c",&cont);
。 %*c
将从缓冲区中读取换行符并将其丢弃。
答案 1 :(得分:5)
\ scanf内部需要用户再次按“ENTER”(换行)才能继续。删除它或按Enter键几次,它将继续
答案 2 :(得分:5)
最好使用fgets(3)
然后使用sscanf(3)
,因为交互式程序总是知道何时会有一行输入。
因此,通常的sane-scanf设计模式确实使程序更复杂,但也会使它更灵活,更可预测,尝试更改......
scanf(...)
到
char space[100];
fgets(space, sizeof space, stdin);
sscanf(space, " %f", &USD);