如何刷新控制台缓冲区?

时间:2011-01-01 07:26:01

标签: c getchar

我有一些代码可以重复运行:

  

printf(“你想继续吗?Y / N:\ n”);
  keepplaying = getchar();

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

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

3 个答案:

答案 0 :(得分:4)

刷新输入流会导致未定义的行为。

  

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;
}

请参阅Why fflush(stdin) is wrongFlush the input buffer

答案 1 :(得分:1)

在printf

之前使用fflush()和flushall()

答案 2 :(得分:1)

据我所知,flushall不是POSIX。要以标准方式刷新控制台缓冲区,只需使用命令:

fflush(NULL);

这个话题似乎有点旧,但我希望这仍然可以帮助其他人。

相关问题