繁体   English   中英

如何刷新控制台缓冲区?

[英]How to flush the console buffer?

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

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

在下一个我的代码正在运行它不等待输入。 我发现在seconed时间里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;
}

请参阅为什么fflush(stdin)错误刷新输入缓冲区

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

fflush(NULL);

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

在printf之前使用fflush()和flushall()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM