如何刷新控制台缓冲区?

Dor*_*onS 3 c getchar

我有一些重复运行的代码:

printf(“您要继续吗?是/否:\ n”);
keepplaying = getchar();

在下一个我的代码正在运行时,它不会等待输入。我发现第二个时间的getchar使用'\ n'作为字符。我在说这是由于sdio有一些缓冲区,所以它保存了最后一个输入“ Y \ n”或“ N \ n”。

我的问题是,在使用getchar之前如何刷新缓冲区,这会使getchar等待我的回答?

Rob*_*ves 5

刷新输入流会导致不确定的行为。

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)错误刷新输入缓冲区