我有一些重复运行的代码:
printf(“您要继续吗?是/否:\ n”);
keepplaying = getchar();
在下一个我的代码正在运行时,它不会等待输入。我发现第二个时间的getchar使用'\ n'作为字符。我在说这是由于sdio有一些缓冲区,所以它保存了最后一个输入“ Y \ n”或“ N \ n”。
我的问题是,在使用getchar之前如何刷新缓冲区,这会使getchar等待我的回答?
刷新输入流会导致不确定的行为。
int fflush(FILE * ostream);
ostream指向未输入最新操作的输出流或更新流,fflush函数使该流的所有未写入数据都将被传递到主机环境中,并被写入文件中;否则,行为是不确定的。
要正确刷新输入流,请执行以下操作:
int main(void)
{
int ch;
char buf[BUFSIZ];
puts("Flushing input");
while ((ch = getchar()) != '\n' && ch != EOF);
printf ("Enter some text: ");
if (fgets(buf, sizeof(buf), stdin))
{
printf ("You entered: %s", buf);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请参阅为什么fflush(stdin)错误和刷新输入缓冲区。