#include <sstream>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
struct PersonInfo{
string name;
vector<string> phones;
};
int main()
{
string line, word;
vector<PersonInfo> people;
istringstream record;
while(getline(cin,line)) {
PersonInfo info;
record.str(line);
record >> info.name;
while(record>>word) /* istringstream相关标志位被改变 */
info.phones.push_back(word);
people.push_back(info);
}
for (auto &p : people)
{
cout << p.name << " ";
for (auto &s : p.phones)
cout << s << " ";
cout << endl;
}
return 0;
}
上面的代码中,第一次getline后,while(record>>word)
word从流record读取数据,读到结尾时eofbit为true,不能继续从流中读取数据。第二次getline时,这个标志位不会自动回复,所以仍然不能从record流中读取数据。最后在屏幕上的输出结果就是只能输出第一行的string。
需要使用clear函数来将所有条件状态位复位。