循环跳过第一时间之后的scanf声明(Loop skips a scanf statement af

2019-07-19 02:29发布

下面是主要的()的代码:

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函数运行每次工作正常,但在第二次通过循环scanf函数输入一个字符不运行。

Answer 1:

前添加一个空格%cscanf 。 这将允许scanf读取前要跳过任何数量的白色空间的choice

scanf(" %c", &choice); 是唯一需要改变的。

加入fflush(stdin); 之前scanf("%c", &choice); 也可以工作。 fflush呼叫将通过scanf的读取下一个输入之前刷新输入缓冲器,中的内容。

在的情况下scanf(" %c", &choice); 即使只在输入缓冲区读取单个字符, scanf将解释该字符作为一个有效的用户输入,并执行继续。 [内使用时等的无限循环的scanf的不正确使用会导致一系列奇怪臭虫while循环。



文章来源: Loop skips a scanf statement after the first time