You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++菜单生成器问题:菜品集中输出,如何修复分类显示?

问题排查与修复:菜单分类显示异常

核心错误分析

  • 错误1:add_dish方法未同步更新菜品类型
    当前add_dish直接使用类默认的dish_type值(初始为0,对应appetizer)判断存储位置,但调用方法前没有根据传入的type参数更新dish_type,导致所有菜品都被存入appetizer向量。

  • 错误2:打印逻辑依赖单一变量,无法遍历所有分类
    dishType是读取最后一个菜品后的类型值,只会触发某一个分类的打印逻辑,其他分类的菜品即使存在也无法显示。


修复方案

1. 修正add_dish方法,先同步菜品类型

在存储菜品前,先根据传入的type更新dish_type,确保菜品存入对应分类的向量:

void Dish::add_dish(string type, unsigned int price, string name) {
    // 先根据传入类型更新dish_type
    set_dish_type(type);
    if (dish_type == 0) {
        appetizer.push_back(make_pair(name, price));
    } else if (dish_type == 1) {
        entree.push_back(make_pair(name, price));
    } else if (dish_type == 2) {
        dessert.push_back(make_pair(name, price));
    }
}

2. 重构打印逻辑,直接遍历分类向量

移除对dishType变量的依赖,直接遍历每个分类的向量,有内容就打印:

// Printing out the Menu
fout << "Menu\n\n";

fout << "Appetizers\n\n";
for (const auto& dish : menu.appetizer) {
    fout << dish.first << "($" << dish.second << ")\n";
}

fout << "\nEntrees\n\n";
for (const auto& dish : menu.entree) {
    fout << dish.first << "($" << dish.second << ")\n";
}

fout << "\nDesserts\n";
for (const auto& dish : menu.dessert) {
    fout << dish.first << "($" << dish.second << ")\n";
}

可选优化:优化set_dish_type的判断逻辑

用else if减少不必要的条件判断,提升效率:

void Dish::set_dish_type(string type) {
    if (type == "appetizer") {
        dish_type = 0;
    } else if (type == "entree") {
        dish_type = 1;
    } else if (type == "dessert") {
        dish_type = 2;
    }
    // 可选:添加无效类型的默认处理,比如设置为0或打印警告
}

内容的提问来源于stack exchange,提问作者Yoseph Hamid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:33:29