在閱讀了許多有關getline被跳過的線程之後,我仍然無法讓我的程序正常工作。getline()在多次調用後跳過
首先我讀了用戶的輸入。它應該像「ADD 1」一樣。然後顯示「ADD」後的值。我開始再次閱讀用戶的輸入,並且由於某些原因,以下getline不想從'ss'讀取,並且將命令留空。
下面的代碼:
string lecture, command;
getline(cin, lecture);
stringstream ss(lecture);
getline(ss, command, ' ');
while(command.compare("EXIT") != 0) {
if(command.compare("ADD") == 0) {
string id;
getline(ss, id);
cout << id << endl;
}
lecture = "";
command = "";
getline(cin, lecture);
ss.str(lecture);
getline(ss, command, ' ');
}
和輸入/輸出(輸出用 「>」 來區分):
ADD 1
>1
ADD 2
(From here -> Goes back to getline(cin, lecture))
我不明白我在做什麼錯? 循環中的第一個getline運行良好,但後來出錯。 很明顯,命令保持空白,即使在getline之後。但是我不明白爲什麼當getline(ss,command,'')作爲getline放棄'\ n'時,爲什麼會有'\ n'後綴,因此命令應該具有新值。
謝謝!
編輯: 有人評論說stringstream.str不正確或重置的東西,他是正確的(爲什麼你刪除你的答案?!)!我知道在每個循環中重新創建對象字符串流,並且它可以工作。如果有比重新創建對象更好的解決方案,我將保持打開的線程。
基本上現在ss是一個指針,而在環我做的每一次迭代:SS =新的字符串流(講座)
我看看這個[主題](http://stackoverflow.com/questions/6378662/getline-problem),我不應該有同樣的問題我的程序中沒有使用任何cin >>,對吧? – 2014-11-05 22:03:24
有人評論說stringstream.str沒有正確重設或什麼,他是對的(爲什麼你刪除了你的答案?!)!我知道在每個循環中重新創建對象字符串流,並且它可以工作。如果有比重新創建對象更好的解決方案,我將保持打開的線程。 – 2014-11-05 22:15:37
'ss.clear()'應該重置stringstream上的任何錯誤。沒有理由一直新的。如果你需要清除任何剩餘的數據,'ss.str(「」);'會做到這一點。 – 2014-11-05 22:25:26