我有一些代码可以重复运行:
printf(“你想继续吗?Y / N:\ n”);
keepplaying = getchar();
在下一个我的代码正在运行它不等待输入。 我发现在seconed时间里getchar使用'\ n'作为字符。 我猜这是因为sdio有一些缓冲区,所以它保存了最后一个输入,即“Y \ n”或“N \ n”。
我的问题是,如何在使用getchar之前刷新缓冲区,这将使getchar等待我的回答?
答案 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;
}
答案 1 :(得分:1)
在printf
之前使用fflush()和flushall()答案 2 :(得分:1)
据我所知,flushall
不是POSIX。要以标准方式刷新控制台缓冲区,只需使用命令:
fflush(NULL);
这个话题似乎有点旧,但我希望这仍然可以帮助其他人。