在输入流上使用 fflush
POSIX 和 C 标准明确声明在输入流上使用 fflush
是未定义的行为。fflush
仅针对输出流定义。
#include <stdio.h>
int main()
{
int i;
char input[4096];
scanf("%i", &i);
fflush(stdin); // <-- undefined behavior
gets(input);
return 0;
}
没有标准方法可以从输入流中丢弃未读字符。另一方面,一些实现使用 fflush
来清除 stdin
缓冲区。Microsoft 在输入流上定义了 fflush
的行为:如果流是打开输入的,则 fflush
清除缓冲区的内容。根据 POSIX.1-2008,除非输入文件是可搜索的,否则 fflush
的行为是未定义的。
有关更多详细信息,请参阅使用 fflush(stdin)
。