在下面的代码中,我尝试让fflush()清除标准输入,但是当我运行代码时,我注意到在第一次迭代之后,它将跳过getchar()部分。我读了一些关于fflush()的手册页。但是我无法找到任何关于为什么fflush()在这种情况下没有清除缓冲区的事情。在第一次迭代中,我在" puts(" Prees n退出")之后输入y,但在第二次迭代中,getchar()仍然从缓冲区得到y。
int main(void)
{
char month_input[size];
typedef struct date_info user_input;
user_input info;
_Bool check = true;
char ch;
while(check)
{
puts("Press n to quit");
printf("ch = %d\n", ch);
if((ch = getchar()) == 'n')
break;
fflush(stdin);
printf("which month?\n");
scanf("%s", month_input);
info.month = month_input;
printf("Enter the date\n");
scanf("%d", &info.date);
printf("Enter the year\n");
scanf("%d", &info.year);
fflush(stdin);
}
printf("month = %s / date = %d / year = %d", info.month, info.date, info.year);
return 0;
}