在下面的代码中,我试图使用getToppings()方法输出披萨配料列表。我想在每个内部'while'循环结束时清除这个浇头列表(即每个新的披萨订单必须在没有浇头的情况下启动)。不幸的是,我发现无法清除我的listOfToppings字符串。当我明确使用.clear()方法时,前一个披萨的最后一个顶部被转移到新披萨。如何清除每个新披萨的listOfToppings?
int main()
{
PizzaOrder pizza;
string size;
string toppingSelection;
bool innerLoop = true;
bool outerLoop = true;
int currentToppingsNum;
// Outer loop
while (outerLoop)
{
// Outer loop
...
// Inner loop
while (innerLoop && currentToppingsNum < 5)
{
pizza.PizzaOrder::getToppings(list);
cout << "Current Pizza: " << pizza.stringizeSize() << list << "\n\n";
cout << "Select an item by number (0 when done): \n\n";
...
cout << "Selection: ";
...
...
pizza.displayPizza();
} list.clear();
}
return 0;
}
...
void PizzaOrder::getToppings(string &listOfToppings)
{
for (int i = 0; i < numToppings; i++)
listOfToppings = listOfToppings + " + " + toppings[i];
}
答案 0 :(得分:1)
通过稍微区别地构建代码,您可以避免使用明确的clear
。
由于每个订单都是新的披萨,您应该在外部循环中创建一个PizzaOrder对象。
int main() {
while(true) {
...
if ( size[0] == 'q' || size[0] == 'Q' ) {
break;
}
PizzaOrder pizza;
...
pizza.displayPizza();
}
}
然而,正如Matt McNabb在评论中暗示的那样,原始代码存在很多其他问题。
通过在线检查程序运行此操作(http://www.gimpel.com/html/pcl.htm) 我收到以下警告/信息
PizzaOrder::getSize(void)
可以成为const std::getline
PizzaOrder::setSize(int)
pizza.toppingsOffered[i]
应为PizzaOrder::toppingsOffered[i]
忽略函数PizzaOrder::addTopping(int)
的返回值
此行的最后一行无效
PizzaOrder::PizzaOrder() {
numToppings = 0;
size=DEFAULT_SIZE;
toppings;
}
符号'size'的声明隐藏符号'PizzaOrder :: size',分配给变量'size'的最后一个值未在
中使用PizzaOrder::PizzaOrder(int size) {
if(!setSize(size))
size=DEFAULT_SIZE;
}
从PizzaOrder::addTopping(string topping)
和PizzaOrder::addTopping(int n)
返回值 - 隐式转换为布尔值,
if (arraySize == 5)
始终评估为True selectedTopping
仅由其构造函数或析构函数还有更多。
最后一个想法:
初始代码看起来像这样
while (outerLoop) {
string list;
...
while (...) {
PizzaOrder::getToppings(list);
...
}
list.clear();
}
getToppings
正在添加到列表中,而clear正在清除即将被销毁的字符串。
最好是
while (outerLoop) {
string list;
...
while (...) {
list.clear();
PizzaOrder::getToppings(list);
...
}
}
以便每次清除列表。
但更好的是
e.g。
string list = PizzaOrder::getToppings(list);
while (outerLoop) {
...
while (...) {
...
}
}
答案 1 :(得分:0)
因为你的列表变量是一个字符串,我的想法是用空字符串替换该列表。我认为你应该创建自己的函数来清除该列表而不是使用.clear()方法。
阅读此link