fflush(stdin)函式在linux下無效
阿新 • • 發佈:2018-11-04
今天在程式設計的時候發現一個有關fflush重新整理緩衝區問題:
#include<stdio.h>
int main(int argc, char const *argv[])
{
char c;
int number;
scanf("%d",&number);
fflush(stdout);
c = getchar();
putchar(c);
return 0;
}
在我輸入一個數字之後再想要接收一個字元的時候,它會直接跳過getchar函式。我當時一看知道是getchar接收了上一個輸入中的回車字元了,於是我就想到用fflush檔案重新整理函式,本以為可以輕鬆解決問題,但是。。。
並沒有什麼用。。。
於是我換了getchar來接受字元就好了,不過這就引起我的疑惑了。
於是在網上查了以下資料發現:
在windows VC下fflush(stdin)是可以實現的,但是linux下不可以。 C標準規定fflush()函式是用來重新整理輸出(stdout)快取的。對於輸入(stdin),它是沒有定義的。但是有些編譯器也定義了 fflush(stdin )的實現,比如微軟的VC。其它編譯器是否也定義了 fflush( stdin)的實現應當查詢它的手冊。GCC編譯器沒有定義它的實現,所以不能使用 fflush( stdin )來重新整理輸入快取。
The ANSI/ISO standard
specifies that fflush() is useful only on OUTPUT streams.