簡體   English   中英

程序不會在“getline”中停止

[英]Program doesn't stop in "getline"

我已經嘗試在互聯網上找到解決方案,但我無法僅在我的情況下找到它。

在這個函數中,當我調用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);

給定輸入"42\\na\\n" ,這將把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 之后或在獲得新的之前。

很抱歉遲到了 7 年 :'(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM