循环在第一次之后跳过scanf语句

时间:2013-02-01 03:19:47

标签: c loops for-loop scanf

以下是main()的代码:

int main (void)
{
float acres[20];
float bushels[20];
float cost = 0;
float pricePerBushel = 0;
float totalAcres = 0;
char choice;
int counter = 0;

for(counter = 0; counter < 20; counter++)
{   
    printf("would you like to enter another farm? "); 

    scanf("%c", &choice);

    if (choice == 'n')
    {
        printf("in break ");
        break;
    }

    printf("enter the number of acres: ");
    scanf("%f", &acres[counter]);

    printf("enter the number of bushels: ");
    scanf("%f", &bushels[counter]);

}


return 0;
}

每次程序运行时,第一次扫描都可以正常工作,但是第二次通过循环时,scanf输入的字符不会运行。

1 个答案:

答案 0 :(得分:5)

%c的{​​{1}}之前添加空格。这将允许scanf在阅读scanf之前跳过任意数量的空格。

choice是唯一需要的更改。

scanf(" %c", &choice);之前添加fflush(stdin);也可以。在通过scanf读取下一个输入之前,scanf("%c", &choice);调用将刷新输入缓冲区的内容。

如果fflush即使输入读缓冲区中只有一个字符,scanf(" %c", &choice);也会将此字符解释为有效的用户输入并继续执行。 scanf的错误使用可能会导致一系列奇怪的错误[在scanf循环中使用时会出现无限循环]。