1. 程式人生 > >fflush(stdin)函式在linux下無效

fflush(stdin)函式在linux下無效

今天在程式設計的時候發現一個有關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檔案重新整理函式,本以為可以輕鬆解決問題,但是。。。
shortcut

並沒有什麼用。。。
於是我換了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.