gpt4 book ai didi

c++ - 在 while 循环结束时清除 C++ 字符串

转载 作者:行者123 更新时间:2023-11-28 06:13:45 25 4
gpt4 key购买 nike

在下面的代码中,我尝试使用 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];
}

最佳答案

您可以通过略微不同地构建代码来避免显式 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) 可以设为常量
  • 忽略函数 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) 的返回值 - 隐式转换为 bool 值,

  • 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);
...
}
}

以便每次都清除列表。

但更好的是

  1. 让 getToppings() 返回一个字符串
  2. 将它从列表中移除,因为它不会改变

例如

string list = PizzaOrder::getToppings(list);
while (outerLoop) {
...
while (...) {
...
}
}

关于c++ - 在 while 循环结束时清除 C++ 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30722679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com