C++ 如何接受字符串';结束';使用C++;?
所以我声明了一个名为listOfItems的int变量,它可以接受用户的输入。 现在,该变量可能是一个大数字,但如果用户决定停止向向量中添加项(使用“string value”变量),他/她只需在程序中键入“end”即可轻松停止C++ 如何接受字符串';结束';使用C++;?,c++,C++,所以我声明了一个名为listOfItems的int变量,它可以接受用户的输入。 现在,该变量可能是一个大数字,但如果用户决定停止向向量中添加项(使用“string value”变量),他/她只需在程序中键入“end”即可轻松停止 // DECLARE INT listOfItems and shoppingList vector int listOfItems = 0; vector<string> shoppingList; cout << "Pleas
// 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你是说doublecin
吗?几乎是,但它并不完全是我想要的,是的,它允许我添加元素并通过键入“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));
}