在cin後getline所遇到的問題

2021-08-22 02:46:51 字數 1306 閱讀 1478

在c++中,使用cin讀取資料後,再使用getline讀字串,就會遇到buffer沒有清空的問題,具體如下

#include

#include

using

namespace

std;

void main()

for (auto &it : text)

}輸入//3//abc

//ab

輸出//

//abc

//ab

即本來還需要讀入3行字串,卻唯讀了1行。

為什麼?

仔細發現,是text的第乙個元素是空字串,而不是我們想要的abc.

其實這裡是個new line ,即\n或者是乙個endl

原因是我們在

cin>>value;

我們這裡做的操作是

鍵盤輸入2

然後敲了個enter回車.

所以此時緩衝區的佇列內容應該是

輸入2輸入enter…2

endl

於是在下面執行getline時,由於檢查到緩衝區還有資料,會把endl讀出來。

在cin後,根據需要多呼叫一次getline,清空緩衝區。

#include

#include

using

namespace

std;

void main()

for (auto &it : text)

}

呼叫cin.ignore()把緩衝區清空。

#include

#include

using

namespace

std;

void main()

for (auto &it : text)

}

上次呼叫的cin.ignore()預設版本,它的完整流程如下:

清空緩衝區直到遇到以下條件之一:

清空1個字元。

讀到endl。

對於情況多字元,於是可以使用cin.ignore(1000,'\n')

這句話表示ignore滿足下面條件之一就會停止:

引數1指ignore清空 1000個字元;

引數2要求ignore清空直到遇到\n(換行標誌)

讀《構建之法》後所遇到的問題

問題 1.如果要成為乙個好的程式設計師,除了技術和團隊合作能力外,還需要什麼嗎?因為現在很多程式設計師他們個人能力也都不錯,而且團隊合作能力 也都不錯,但是他們都是只工作了一段很短的時間就跳槽了,所以我想知道如果要長期做下去,還需要什麼能力嗎?2.在做需求分析的時候,除了對使用者進行循循善誘引導他們...

關於cin作為判斷條件所遇到的一些問題

話不多說,碼來 最後再給大家分析原因 includeusing namespace std int main else cout a a endl return 0 如果我輸入5 true rdstate 函式的返回值 0 三個標記位返回的返回值 000 goodbit標記位的返回值 1 a 5 如...

在python使用sqlite所遇到的坑

使用sqlite查詢返回多條資料並不是乙個列表,而是乙個sqlite3.cursor物件,需要遍歷傳入到乙個新的列表再進行操作,如以下 datalist select list select from movie250 limit s,s start,limit 封裝list data cursor...