C代码在运行期间挂起

时间:2010-09-14 05:42:12

标签: c syntax

我刚开始学习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);
}

3 个答案:

答案 0 :(得分:12)

\n

中删除scanf

修改

上述更改不起作用。 当使用scanf读取输入时,在按下返回键后读取输入,但是返回键生成的换行不被scanf消耗,这意味着下次从标准输入读取时,将准备好读取新行。

要避免的一种方法是使用fgets将输入作为字符串读取,然后使用sscanf提取所需内容。

使用换行符的另一种方法是scanf("%c%*c",&cont);%*c将从缓冲区中读取换行符并将其丢弃。

C faq on problems with scanf

答案 1 :(得分:5)

\ scanf内部需要用户再次按“ENTER”(换行)才能继续。删除它或按Enter键几次,它将继续

答案 2 :(得分:5)

避免使用scanf()


最好使用fgets(3)然后使用sscanf(3),因为交互式程序总是知道何时会有一行输入。

因此,通常的sane-scanf设计模式确实使程序更复杂,但也会使它更灵活,更可预测,尝试更改......

scanf(...)

char space[100];
fgets(space, sizeof space, stdin);
sscanf(space, " %f", &USD);