在輸入流上使用 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)
。