關於fflush的深入理解

2021-06-16 09:15:59 字數 2531 閱讀 9996

@求fflush(stdin)和fflush(stdout)用法

#include

void main()

這樣的乙個問題。

假如輸入的不是3個而是大於3個時候,是不是要清空緩衝區呢?

輸出的時候是不是也要清空一下呢?

謝謝您幫我解答。

3q@【gfxiang】:

一般不用。

btw: fflush()似乎只對輸出緩衝區清空,對輸入緩衝區清空可以用

do while ( c != eof && c != '/n');

【iu_81】:

flush(stdin)重新整理標準輸入緩衝區,把輸入緩衝區裡的東西丟棄

fflush(stdout)重新整理標準輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出裝置上。

【iu_81】:

scanf()函式接收輸入資料時,遇以下情況結束乙個資料的輸入:(不是結束該scanf函式,scanf函式僅在每乙個資料域均有資料,並按回車後結束)。

① 遇空格、「回車」、「跳格」鍵。

② 遇寬度結束。

③ 遇非法輸入。

鍵盤緩衝區就可能有殘餘資訊問題。

scanf()函式應該只是掃瞄stdin流,這個殘存資訊是在stdin中

解決就要在scanf()函式之後加個fflush(stdin)

【iu_81】:

fflush(stdout)重新整理stdout,因為printf是緩衝輸出,一般情況下stdout是行緩衝。 

單程序環境中這個函式在這兒沒什麼用,在多程序/多執行緒時就有用了。

【comman_ndsc】:

#include

void main()

這樣的乙個問題。

假如輸入的不是3個而是大於3個時候,是不是要清空緩衝區呢?// 如果樓主是想把多餘的輸入清除的話,那就應該在輸入語句之後加一條 while(getchar() != '/n') ;這樣可以保證,輸入緩衝區中只有三個數。

輸出的時候是不是也要清空一下呢?// 這個到是很少用

謝謝您幫我解答。

#include

void main()

if(a > b)

d = a;

else

d = b;

if(c > d)

d = c;

printf("%d/n",d);

沒有你後面說的那個。

例子:

#include

#include

#include

#include

void flush(file *stream);

int main(void)

void flush(file *stream)

參考資料:tc_search

@fflush(stdin)重新整理標準輸入緩衝區,把輸入緩衝區裡的東西丟棄

fflush(stdout)重新整理標註輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出裝置上

@注:本文**

並非原創,收入本博,聊作記錄.

c/c++ 誤區:fflush(stdin) 1.       為什麼 fflush(stdin) 是錯的

首先請看以下程式:

#include

int main( void )

int i;

for (;;)

/* 沒有發生錯誤,清空輸入流。                 */

/* 通過 while 迴圈把輸入流中的餘留資料「吃」掉 */

while ( (c = getchar()) != '/n' && c != eof ) ;

/* 使用 scanf("%*[^/n]"); 也可以清空輸入流, */

/* 不過會殘留 /n 字元。                          */

printf("%d/n", i);

}return 0;

}/* c++ 版本 */

#include

#include // 為了使用numeric_limits

using std::cout;

using std::endl;

using std::cin;

using std::numeric_limits;

using std::streamsize;

int main()

// 讀到非法字元後,輸入流將處於出錯狀態,

// 為了繼續獲取輸入,首先要呼叫 clear 函式

// 來清除輸入流的錯誤標記,然後才能呼叫

// ignore 函式來清除輸入流中的資料。

cin.clear();

// numeric_limits::max() 返回輸入緩衝的大小。

// ignore 函式在此將把輸入流中的資料清空。

// 這兩個函式的具體用法請讀者自行查詢。

cin.ignore( numeric_limits::max(), '/n' );

cout << value << '/n';

}return 0;

}

關於C 的深入理解

1.關於引用和指標的理解 在我自己看來有兩個方面需要重視!第一是c 中,和 這兩個操作符的用法 1 可以作為宣告乙個指標 也可以用來作用為取值 代表位址指向的儲存單元 2 可以作為宣告乙個引用 也可以用來作用為取位址符號 第二是指標和引用的定義和性質區別 擷取自 inta 1 int p a int...

深入理解7816(2) 關於ATR

智慧卡 此處主要指接觸式 cpu卡 本身始終處於被動的狀態,所以終端裝置在和智慧卡進行資料互動的時候,需要首先給智慧卡發指令,智慧卡才會對應地給出應答。而智慧卡告訴終端的第一句話就是 atr,亦即 復位應答 想象一下,如果讓你為智慧卡設計乙個通訊協議,該怎麼設計?因為 atr是智慧卡上電後說的第一句...

深入理解7816(2) 關於ATR

智慧卡 此處主要指接觸式cpu卡 本身始終處於被動的狀態,所以終端裝置在和智慧卡進行資料互動的時候,需要首先給智慧卡發指令,智慧卡才會對應地給出應答。而智慧卡告訴終端的第一句話就是atr,亦即 復位應答 想象一下,如果讓你為智慧卡設計乙個通訊協議,該怎麼設計?因為atr是智慧卡上電後說的第一句話,所...