程序不会止步于"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);
当给定输入"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年:'(
相关文章:
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 当 getline 用于获取整个字符串时,程序崩溃
- 使用getline和字符串函数C++程序中的分段错误
- 使用getline()将字符串输入到程序中会导致下一个输入出现某种溢出
- 使用 getline() 无限运行的匹配单词 c++ 程序
- 而(getline)在VTK程序中未执行
- 程序跳过getline
- CIN和GETLINE在一个程序中,只有一个生效
- C Getline力量可以关闭带有空间的控制台应用程序
- CIN / Getline在控制台应用程序中的一行中
- Getline使程序暂停
- 我的程序跳过getline(cin,CustInfo),进入CustomerInfo函数中的City.我该怎么修
- 基本C++程序,getline()/parseing a file
- 为什么我的程序使用 getline() 跳过步骤
- 我们如何在程序中同时使用 cin 和 getline 函数
- C++程序未按预期输出(使用 .at、if/else、getline)
- Getline()不保持应用程序打开
- getline()使程序崩溃
- 程序跳过std::getline
- 程序不会止步于"getline"