A. c語言fflush函數
fflush功能:清除讀寫緩沖區。
fflush(stdin)是用來清空輸入緩沖區,通常是為了確保不影響後面的數據讀取,
例如在讀完一個字元串後緊接著又要讀取一個字元,此時應該先執行fflush(stdin)。
但要注意的是,此函數僅適用於部分編譯器(如VC6),
但是並非所有編譯器都要支持這個功能(如gcc4.6)。
這是一個對C標準的擴充。
B. C語言fflush(stdin);的用法
首先請看以下程序:
#include <stdio.h>
int main( void )
{
int i;
for (;;)
{
fputs("Please input an integer: ", stdout);
scanf("%d", &i);
printf("%d\n", i);
}
return 0;
}
這個程序首先會提示用戶輸入一個整數,然後等待用戶輸入,如果用戶輸入的是整數,程序會輸出剛才輸入的整數,並且再次提示用戶輸入一個整數,然後等待用戶輸入。但是一旦用戶輸入的不是整數(如小數或者字母),假設 scanf 函數最後一次得到的整數是 2 ,那麼程序會不停地輸出「Please input an integer: 2」。這是因為 scanf("%d", &i); 只能接受整數,如果用戶輸入了字母,則這個字母會遺留在「輸入緩沖區」中。因為緩沖中有數據,故而 scanf 函數不會等待用戶輸入,直接就去緩沖中讀取,可是緩沖中的卻是字母,這個字母再次被遺留在緩沖中,如此反復,從而導致不停地輸出「Please input an integer: 2」。
也許有人會說:「居然這樣,那麼在 scanf 函數後面加上『fflush(stdin);』,把輸入緩沖清空掉不就行了?」然而這是錯的!C和C++的標准里從來沒有定義過 fflush(stdin)。也許有人會說:「可是我用 fflush(stdin) 解決了這個問題,你怎麼能說是錯的呢?」的確,某些編譯器(如VC6)支持用 fflush(stdin) 來清空輸入緩沖,但是並非所有編譯器都要支持這個功能(linux 下的 gcc 就不支持),因為標准中根本沒有定義 fflush(stdin)。MSDN 文檔里也清楚地寫著fflush on input stream is an extension to the C standard(fflush 操作輸入流是對 C 標準的擴充)。當然,如果你毫不在乎程序的移植性,用 fflush(stdin) 也沒什麼大問題。以下是 C99 對 fflush 函數的定義:
int fflush(FILE *stream);
如果 stream 指向輸出流或者更新流(update stream),並且這個更新流
最近執行的操作不是輸入,那麼 fflush 函數將把這個流中任何待寫數據傳送至
宿主環境(host environment)寫入文件。否則,它的行為是未定義的。
原文如下:
int fflush(FILE *stream);
If stream points to an output stream or an update stream in which
the most recent operation was not input, the fflush function causes
any unwritten data for that stream to be delivered to the host environment
to be written to the file; otherwise, the behavior is undefined.
其中,宿主環境可以理解為操作系統或內核等。
由此可知,如果 stream 指向輸入流(如 stdin),那麼 fflush 函數的行為是不確定的。故而使用 fflush(stdin) 是不正確的,至少是移植性不好的。
C. 在C語言編程中什麼時候需要用fflush(stdin)
fflush函數刷新一個流,可以用來防止內存地址已經占滿,當把這個流指向用戶標准輸入(stdin)時,可以清除目前緩沖區中的內容,輸入回車也會被清楚掉,例如,在scanf()之後使用fflush(stdin)是當輸入緩沖區(內存)滿了的時候,自動清除輸入流緩沖區中所有數據,其實現在內存這么大,每次輸入的數據只有幾個位元組,是幾乎用不上的,多用上的地方是在嵌入式開發上面,因為每個固化晶元上一般只有幾十K的空間,所以空間顯得非常重要,此時就要用上了
D. 關於C語言的fflush()
fflush作用在清空Buffer, 但是標准中只有定義output, 對input無定義. 可能有作用, 可能沒作用, 依照編譯器會如何實作而定.
E. c語言sys()fflush()用法
fflush(stdin)
;
清空輸入緩沖區,通常是為了確保不影響後面的數據讀取(例如在讀完一個字元串後緊接著又要讀取一個字元,此時應該先執行fflush(stdin);)
sys()這個函數在C語言中不存在,我猜你說的是system()函數,這個函數可以執行系統命令,如:
system("pause");表示執行到此處要暫停,等待按任意鍵繼續執行。
system("cls");表示清屏。
F. C語言 fflush(stdin)是什麼意思
fflush(stdin)中stdin是標准輸入的意思。
fflush(stdin)的作用是清空標准輸入緩沖區。
舉例說明如下:
int a;
char c;
scanf("%d",&a);
fflush(stdin); // 清空輸入緩沖區
scanf("%c",&c);如果不加fflush(stdin)的話,第一次輸入的回車可能會被第二次輸入操作所捕捉,也即變數c的值將會是回車符,並不會接收用戶輸入的字元。
G. 有關於c語言中fflush(stdin)的使用方法,我看了書本幾個範例,始終不明白fflush(stdin)的用法
這個函數其實很簡單,都是編程的軟體搞的.
比如在DevC中,程序跑完以後編譯軟體的處理是直接將程序關閉,這時候我們是無法看到運行的結果的,需要手動設置讓它停下來,比如用system("pause");或者是getchar(); 大多數書上選擇的是後者,這樣程序到這一步就會停下來等你按一個鍵.不過麻煩的是這個被讀到緩沖區里的數還在,如果後面還有用到的話,就會有問題,這時候就需要用fflush()來清理一下.
說白了就是壞習慣搞出來的一個玩意,就像個回收站,裡面有東西而又需要用它的時候,調用fflush()倒一次垃圾,就行了
全部手打...累死了.......
H. C語言中「fflush(stdin)」的作用是什麼
清除標准輸入設備(一般是鍵盤)的緩存。
scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。
鍵盤緩沖區就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之後加個fflush(stdin)。
flush(stdin)刷新標准輸入緩沖區,把輸入緩沖區里的東西丟棄
fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區里的東西列印到標准輸出設備上。