程序不会在“getline”中停止

时间:2014-04-09 15:45:04

标签: c++

我已经尝试在互联网上找到解决方案,但我不能在我的情况下找到它。

在此函数中,当我调用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));
}

2 个答案:

答案 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并且循环不会进入循环的第二次迭代,因为在第一次迭代中只删除了唯一的分隔符。