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