我有一些重复运行的代码:
printf("要继续吗?Y/N: \n");
继续玩 = 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;
}
在 printf 之前使用 fflush() 和 flushall()
据我所知,flushall
不是POSIX。为了以标准方式刷新控制台缓冲区,您可以简单地使用以下命令:
fflush(NULL);
这个话题似乎有点老了,但我希望这仍然可以帮助其他人。