在阅读了许多有关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