C 問題關於cin輸入流的問題如何提取cin的緩衝區的內容呢

時間 2022-03-08 15:30:13

1樓:

這些緩衝區也是我很疑惑的問題,有的說當緩衝區滿或者有強制性輸出時才會輸出資料,就像有cin語句的時候,不過緩衝區是不會把空格或回車賦給變數的,所以緩衝區中會保留回車符,下次賦值的時候可能會直接賦給變數而不會等待使用者按下回車了,要消除緩衝區中的資料用fflush(stdin)就行了,要想得到緩衝區中全部資料我個人認為你可以把它們都傳給乙個字串指標,具體的還要除錯能通過才行

2樓:

endl緩衝區中資料清空

關於c++中緩衝區提取資料問題,涉及到cin.ignore()函式

3樓:

所謂「阻塞等待」的原因不是因為cin.ignore(1000,'\n');,而是因為getline(cin,name);。getline(cin,name);這麼寫是getline(cin,name,'\n');預設簡寫,它必須等待接收到乙個'\n'才向下走,否則繼續等待;所以要在最後輸入2個'\n'才能繼續,就是說第乙個'\n'是作為name的結束標記接收但不計入最後乙個字元,第二個'\n'才是讓getline從輸入緩衝區讀取字元的命令。

你可以把getline(cin,name);改成getline(cin,name,' ');,當你輸入完字串最後乙個字元後接著加乙個' '再回車,立馬就會出現c:讓你輸入c的值。這樣就可以體會為什麼寫成getline(cin,name);,也就是getline(cin,name,'\n');會要輸入兩個'\n'才出現提示c:。

另說一句,若不用cin.ignore(1000,'\n');,由於前面的cin >> b;會把打入的'\n'遺留在輸入緩衝區,getline會把它當作字串輸入結束標記而使邏輯混亂。所以當getline(cin,name);這麼寫時,cin.

ignore(1000,'\n');就有必要了;若寫成getline(cin,name,' ');,不要cin.ignore(1000,'\n');也會正常工作(前面遺留了' '時除外,一般不會遺留' ')。供參考。

4樓:廣泛的

cin.ignore(a,ch)方法是從輸入流(cin)中提取字元,提取的字元被忽略(ignore),不被使用。每拋棄乙個字元,它都要計數和比較字元:

如果計數值達到a或者被拋棄的字元是ch,則cin.ignore()函式執行終止;否則,它繼續等待。它的乙個常用功能就是用來清除以回車結束的輸入緩衝區的內容,消除上一次輸入對下一次輸入的影響。

比如可以這麼用:cin.ignore(1024,'\n'),通常把第乙個引數設定得足夠大,這樣實際上總是只有第二個引數'\n'起作用,所以這一句就是把回車(包括回車)之前的所以字元從輸入緩衝(流)中清除出去。

你不給引數,則預設引數為cin.ignore(1,eof),即把eof前的1個字元清掉,沒有遇到eof就清掉乙個字元然後結束,就是這樣啊,所以你每次都少乙個字元.

關於c++裡的cin,以及緩衝區 20

5樓:幻夢·人生

cin是包含乙個錯誤檢查的。如果cin中快取區的資料是不正確的,它要求程式必須對其進行處理。否則後續的輸入都會是有問題的。

cin通過標誌位的方式來進行標註。我們需要呼叫clear來清除這個標誌位。

ignore是用來清空當前的快取區的。預設是清除到eof為止。

如果不ignore,那麼cin裡面的錯誤的資料還在。那麼讀取還是不正常的。

cin和cout的緩衝區是不一樣的。程式常用的資料流有stdin,stdout,stderr。

c++中cin的輸入問題

6樓:匿名使用者

這個還真不太容易說明白,因為c++使用流這個東西,cin是乙個流物件,接收終端的輸入遇到回車結束

然後終端的輸入都存入到cin物件裡

然後通過過載的運算子》將儲存的內容儲存到變數裡,但是預設按空格結束,其實你可以修改結束標誌的

那麼分析你cin的過程,輸入1 空格 2,流裡存入了1空格2

然後cin>>a,將1傳給了a,遇到了空格,結束,但是此時cin並沒有空.

cout << a,輸出了1

然後繼續cin>>b,因為cin裡還有乙個2存在,所以,b也得到了2

cout << b,就又輸出2了

我也改乙個判斷輸入的吧

#include

using namespace std;

int main()

//語句1

cout <>b; //語句3

while((c=cin.get()) != ' ' && c >= '0' && c <= '9')

cout <

return 0;}

7樓:匿名使用者

語句3執行了,1+空格+2+回車,則1、2兩個整數都進入緩衝區,不是12.

你可以輸出乙個換行就清楚了。

#include

using namespace std;

int main()

while(*str!='\0')/*如果字串結束就跳出while迴圈*/

return true;/*如果沒有數字以外的字元,證明這個字串是乙個整型,就返回true*/

}int main()

a=atoi(str);

//cin >>a; //語句1cout <>b; //語句3cout <

8樓:遁世千秋

cin輸入流會暫存的,原程式有兩個cin你輸入1+空格2的時候會會把1,2分別存入a和b,如果只有乙個cin>>a;則會輸出1;至於報錯的事兒,其實也沒必要

9樓:匿名使用者

很簡單的啊,不管你一次輸入多少,先送到輸入流緩衝區裡,然後後面的語句繼續執行,當有讀入的語句時,它先看緩衝區有木有!有就直接讀取了,繼續執行下面的語句,所以你的結果也是情理之中的。一般我們用cin.

ingnore(std::numberic_limits::max(),'\n')清除緩衝區。

c++中用cin輸入的時候用不用考慮輸入緩衝區非法字元問題?

10樓:匿名使用者

cin有拋棄機制。

cin是乙個線性緩衝區,非法字元會被忽略掉,直到找到下乙個合法輸入,找到後,之前的非法輸入會被清除。

如果一直沒有合法輸入,cin不會清除緩衝區。

fflush(stdin);

11樓:匿名使用者

緩衝區是系統考慮的,不是程式設計者的事。cin 不會檢查陣列是否會越界,遇到''白"字元(空格、'\n',)會結束輸入過程。

12樓:

每結束一次輸入,是以輸入回車符(就是\n)表示的。是一次的輸入,不是乙個。

此時\n表示上次輸入的結束,並不會影響下次的輸入。

c語言輸入問題,C語言輸入問題

最好用乙個scanf 把所有要輸的東西都放進去 因為scanf 是你 裡面 什麼樣的 專格式,你在輸入的時屬候必須按照那樣的格式 例如 scanf d,d a,b 那麼在輸入時就要輸a,b 如果是scanf d d a,b 就要這樣輸 a b 多個scanf 連在一起 我還沒用過。所以建議 乙個sc...

關於c語言的問題,關於C語言的問題

鷹弈 1 有定義 int n 0,p n,q p 則以下選項中,正確的賦值語句是 d a.p 1 b.q 2 c.q p d.p 5 解 p為一級指標,其中p為指標的地址,q為二級指標,其中 q為指標的地址,只能給變數或指標變數賦值,不能給地址賦值,所謂地址,就是由acs碼構成,簡單的說,就是每個人...

關於C 的問題,關於C 的一個問題?

size type應該是c 為例如string類和許多其他庫型別定義的配套型別,使這些庫型別的使用與機器無關.所以不能單獨用。具體如下 size type是為string類型別和vector類型別定義的型別,用以儲存任意string物件或vector物件的長度,標準庫型別將size type定義為u...