[英]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;
}
据我所知, flushall
不是POSIX。 为了以标准方式刷新控制台缓冲区,您只需使用以下命令:
fflush(NULL);
这个话题似乎有点旧,但我希望这仍然可以帮助其他人。
在printf之前使用fflush()和flushall()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.