【发布时间】:2020-03-27 15:29:47
【问题描述】:
while((addRemove == "R" || addRemove == "r") && continueLoop == true)
{
for(int i = 0; i < choreVector.size(); i++)
{
if(choreVector[i] != "")
{
cout << choreVector[i] << endl;
}
}
cout << endl;
cout << "Enter value to add to remove from the list" << endl;
cin.ignore();
getline(cin, userValue);
cout << endl;
for(int j = 0; j < choreVector.size(); j++)
{
if(userValue == choreVector[j])
{
choreVector.erase(choreVector.begin() + j);
}
}
cout << "Would you like to remove another item from the list(y/n)" << endl;
getline(cin, userValue);
cout << endl;
if(userValue == "n" || userValue == "N")
{
continueLoop = false;
}
}
所以我的问题是我在一个向量中有一个家务列表,其中包含以下项目的空格: “倒垃圾” 《遛狗》
我的问题是用户可以选择从键盘输入中删除向量,所以我一直在使用 getline 进行 cin 输入。 Getline 在第一次运行时可以完美地删除任何元素,但在第二次运行时失败,并且在删除第一次后不会删除元素。我在 GetLine 之前有 cin.ignore,据我所知,它清除了缓冲区,并会忽略以前 cin 中的任何数据。
可能是我忽略了一些愚蠢的事情,但如果有人可以提供帮助,那就太好了。
【问题讨论】:
-
cin.ignore();不会“清除缓冲区”。它从待处理的输入流中消耗并丢弃 one 字符,如果eof状态被触发,则中止该工作,如果是这种情况,后续的读取请求将自动没有中间的clear()失败。 永远不要假设您的输入操作成功。您注定迟早会假设错误(通常在最不合时宜的时候,例如当教授或更糟糕的是付费客户正在运行您的代码时)。 -
删除
cin.ignore()。 -
@jackw11111 我已经尝试过了,但是读取根本不会从向量中删除