[英]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.