Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何接受字符串';结束';使用C++;?_C++ - Fatal编程技术网

C++ 如何接受字符串';结束';使用C++;?

C++ 如何接受字符串';结束';使用C++;?,c++,C++,所以我声明了一个名为listOfItems的int变量,它可以接受用户的输入。 现在,该变量可能是一个大数字,但如果用户决定停止向向量中添加项(使用“string value”变量),他/她只需在程序中键入“end”即可轻松停止 // DECLARE INT listOfItems and shoppingList vector int listOfItems = 0; vector<string> shoppingList; cout << "Pleas

所以我声明了一个名为listOfItems的int变量,它可以接受用户的输入。 现在,该变量可能是一个大数字,但如果用户决定停止向向量中添加项(使用“string value”变量),他/她只需在程序中键入“end”即可轻松停止

  // DECLARE INT listOfItems and shoppingList vector
  int listOfItems = 0;
  vector<string> shoppingList;
  cout << "Please enter the number of items you wish to purchase: " << endl;
  cout << "type end to finish program " << endl;

  cin >> listOfItems;
  /// SECOND VERSION AFTER READING SOME COMMENTS
  string value;
  do {
    cin >> value;
    shoppingList.push_back(value);  // add new value to vector
  } while(value != "end" && value != "END");


/// MAIN VERSION
for (int i = 0; i < listOfItems; i++) {
    string value;
    cin >> value;
    do {
      shoppingList.push_back(value);  // add new value to vector
    } while(value != "end" && value != "END");
  }
//声明INT-listOfItems和shoppingList向量
int-listOfItems=0;
矢量购物清单;
库特值;
购物清单。推回(值);//向向量添加新值
}while(value!=“end”&&value!=“end”);
///主要版本
for(int i=0;i>值;
做{
shoppingList.push_back(value);//向vector添加新值
}while(value!=“end”&&value!=“end”);
}
在上面的代码块中,我只创建了一个for循环,该循环将按照用户提交的ListoItems中指定的次数运行。在for循环中,我添加了do while,只要字符串没有满足'end'或'end'关键字,就应该向向量中添加项

它不起作用。有人知道如何解决这个问题吗?

字符串值;
string value;
cin >> value;
for (int i = 0; i < listOfItems && value != "END" && value != "end"; i++) {
    shoppingList.push_back(value);  // add new value to vector 
    cin >> value;
}
cin>>值; 对于(int i=0;i>值; }

这会满足你的要求。它…从用户处读入一个值。检查该值是否为“end”或“end”,并且我们仍然没有足够的项目。它将他们输入的内容添加到购物列表中(现在我们已经确定它是好的)。它读取另一项并再次执行所有操作。

您实际上需要在while循环中接受输入:

do {
    string value;
    cin >> value;
    shoppingList.push_back(value);  // add new value to vector
} while(value != "end" && value != "END");

否则这将持续运行。这样,您实际上可以根据用户输入在
std::vector
中插入什么

string value;
int i = 0;
while(cin>>value && i++ != 10 && value != "END" && value != "end")
{
   shoppingList.push_back(value);
}

在实际插入之前,您应该检查“END”值,否则您将在h购物列表中拥有该值(您可以只弹出最后一个项目,但不是)

//在实际插入元素之前检查v是否为END
对于(std::string v;shoppingList.size()>v&&v!=“结束”&&v!=“结束”){
//移动它,因为你不再使用v
购物清单。推回(标准::移动(v));
}

当循环应该做什么时,
做什么?你能给我们解释一下你的代码吗?如果你不想在列表中出现end,你应该在插入之前测试字符串的“end”。这是一个无限循环。做永远不会结束的事。如果您的第一个条目不是“结束”,它将进入do while并在do while条件下继续循环。如果您想添加字符串直到找到“结束”,您应该多次向用户请求字符串。为什么需要两个循环?我认为你应该坐下来,和你的同事把逻辑讲清楚。DRY=不要重复你自己;P@JHB对不起,我没听懂,你能再说一遍吗P你是说double
cin
吗?几乎是,但它并不完全是我想要的,是的,它允许我添加元素并通过键入“end”来停止程序。然而,当我声明我只想添加3个元素时,它应该允许我这样做,这个方法即使我只声明要添加6个元素;它一直在问我6个以上的值。@Kir“如何声明[您]只想添加3个元素?”我的假设是您想要的元素数存储在整数中,
listOfItems
。它到底在哪里?@scohe001检查我更新的问题。listOfItems只是一个int变量,我将其实例化为0;在用户提交一个整数后,它将被更改。这不会每次都在
购物列表的开头添加一个空字符串吗?(我还想明确指出,我并不是想对我对你答案的反复评论进行指责。我无意冒犯你。我只是想确保你的答案尽可能正确)你可以检查一下。-:)它不会显示输出,因为它是一个空字符串。这会输出列表大小和中间的逗号(忽略结尾的逗号,我懒得处理它)。我以为您正在寻找解决方案。现在检查答案。又加了一个方法第二个看起来对我有用。美好的不妨做
i++!=列表项
而不是
i!=10
。这样,您就不需要循环体中的
i++
,您可以通过查看
listOfItems
来符合OP的问题。我喜欢这个解决方案!:)完全同意,只是不确定是否要把它加进去
//Check if v is not END before actually inserting the element
for(std::string v; shoppingList.size() < listOfItems 
                   && std::cin >> v && v != "END" && v != "end";) {
  //Move it since you won't use v anymore
  shoppingList.push_back(std::move(v));
}