我已经尝试在互联网上找到解决方案,但我不能在我的情况下找到它。
在此函数中,当我调用getline(cin,line)
时,程序不会停止插入值。例如,如果我改为cin >> line
,一切都很完美。
void AddPeople(vector <People*> people_list)
{
system("CLS");
string line;
string first_name, second_name, third_name;
string delimiter = " ";
size_t pos = 0;
string token;
int i=0;
cout << "MENU::Add name" << endl;
cout << "Name: ";
getline(cin, line);
while ((pos = line.find(delimiter)) != string::npos)
{
token = line.substr(0, pos);
line.erase(0, pos + delimiter.length());
i++;
if(i==1)
{
first_name=token;
}
else if (i=2)
{
second_name=token;
third_name=line;
}
}
people_list.push_back(new People(first_name, second_name, third_name));
}
答案 0 :(得分:0)
getline()在给定和行尾字符时表现得很有趣。
程序:
int x;
std::cin>>x;
std::string a;
std::getline(std::cin, a);
如果输入"42\na\n"
,则会在x
和""
中将42读入a,因为'2'
和'\n'
之间有0个字符。这可以通过在std::getline
中没有任何内容的循环中调用a
来解决。
答案 1 :(得分:0)
循环中代码的执行将取决于您在行中插入的单词数。 例如,如果line有3个单词,如“firstName midName lastName”,则结果将按预期正确:
first_name = "firstName";
second_name = "midName";
third_name = "lastName";
但如果行只包含2个单词“firstName lastName”,那么只会提取first_name并且循环不会进入循环的第二次迭代,因为在第一次迭代中只删除了唯一的分隔符。