關於字元讀取,過濾回車的問題。

2021-10-07 10:30:32 字數 1583 閱讀 2982

1. fflush()失效問題:fflush(stdin)是未定義行為,該函式用於輸出流,即fflush(stdout) 。 用rewind(stdin)代替重新整理輸入緩衝區。

2. 參考文章:

3.關於c++的清空緩衝區的方法:

#include

#include

#include

#include

// 測試 2

intmain()

return0;

}#if 0

// 測試1

intmain

(void

)return0;

}#endif

// 注:fflush() 函式用於輸出流。fflush(stdin)是未定義行為。

/* 以下是一些過濾回車的方法。打✔的可以每次輸入多個(在新輸入時,清楚緩衝區的所有內容),

沒有✔的只消除\n字元(每次輸入至多輸入乙個)。 */

//scanf --過濾回車

// 1.scanf("空格%c",&c); 新增空格、\t、\n等

// 2.scanf("%c%*c", &a); 使用 %*c 過濾

// 3.scanf("%c",&c); getchar(); 使用getchar()讀取回車

// 4.setbuf(stdin, null); 設定緩衝區為0

// 5.scanf("%*[^\n]"); scanf("%*c"); 掃瞄整行,清空全部緩衝區 ✔

// 6.使用rewind(stdin); 清空全部 ✔

// 7.while ((c = getchar()) != '\n' && c != eof); 需要臨時變數c ✔

//getchar --過濾回車

// 1.a = getchar(); getchar(); 使用getchar()讀取回車

// 2.setbuf(stdin, null); 設定緩衝區為0

// 3.scanf("%*[^\n]"); scanf("%*c"); ✔

// 4.使用rewind(stdin); ✔

// 5.while ((c = getchar()) != '\n' && c != eof); 需要臨時變數c ✔

/// c++

// 1.

// cin.clear();

// cin.sync();

// 2.

numeric_limits::max(), '\n' );

// cin.ignore(1024, '\n'),通常把第乙個引數設定得足夠大,這樣實際上總是只有第二個引數'\n'起作用,

//所以這一句就是把回車(包括回車)之前的所以字元從輸入緩衝(流)中清除出去。

// 3.對於 _getch() 無回顯有效

//控制台清空緩衝區 flushconsoleinputbuffer(getstdhandle(std_input_handle));

讀取帶空格,回車的字串

一般用gets 就能實現讀帶空格的,但有時候,不知道為啥,用gets會莫名出錯。千萬不要用gets 這裡來說說cin.get c 的題居然考的這 如 讀取 tom hanks 18 7817 80 80 90 70 includeusing namespace std int main char a...

解決字元回車問題的幾種方式

不止一次的遇見當輸入字元或字元陣列時,回車被當作字元輸入的情況。分析 對於幾種c語言字元輸入函式 1.scanf 會在輸入前清除緩衝區域 不懂緩衝區域的朋友可以先了解一下 且scanf 遇到空格與回車結束輸入,並且把空格與回車保留在緩衝區域 2.gets 從緩衝區域得到字串,接受空格,遇到回車結束,...

個人筆記 關於編碼過濾的問題

我們有時候傳送從瀏覽器傳送請求時會發生亂碼的問題這時我們可以寫乙個編碼過濾器。以下是post編碼的解決方法 如上 req.setcharacterencoding utf 8 方法和resp.setcontenttype text html charset utf 8 方法只能解決post請求的亂碼...