程序不会止步于"getline"

Program doesn't stop in "getline"

本文关键字:getline 程序      更新时间:2023-10-16

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

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

getline()在给定和行尾字符时表现得很有趣。

程序:

int x;
std::cin>>x;
std::string a;
std::getline(std::cin, a);

当给定输入"42nan"时,这将把42读入x,把""读入a,因为'2''n'之间有0个字符。这可以通过在循环中调用std::getline来解决,而a中没有任何内容。

循环中代码的执行将取决于在行中插入的单词数量。例如,如果第行有3个单词,如"firstName midName lastName",则结果将如预期的那样正确:

first_name = "firstName";
second_name = "midName";
third_name = "lastName";

但如果行仅包括2个单词"firstName lastName",则将仅提取first_name,并且循环将不会进入循环的第二次迭代,因为在第一次迭代中删除了唯一的分隔符。

我尝试了同样的问题,并记住了一个简单的解决方案。

只需使用清洗缓冲区

fflush(stdin);

在getline之后或在获得新的getline之前。

很抱歉迟到7年:'(