C++实现根据菜单列表将用户输入餐品代码自动映射为对应餐名
C++餐品代码自动匹配功能实现方案
现有代码问题点
- 仅定义了单个
meal_ordered、meal_price变量,输入多份餐品时前序数据会被最后一次输入覆盖,无法保存全部订单信息 - 订单序号从0开始计数,输出缺少
*分隔符,价格没有做固定两位小数的格式控制,和要求的输出格式不符 - 无效餐品码输入后未做兜底处理,会带入脏数据到后续输出环节
cin.ignore()放在输入餐品码的循环内部,会错误吞掉有效输入字符- 使用C风格
strcpy处理字符串存在越界风险,C++环境下优先使用std::string类型更安全
修正后完整代码
#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { string cust_name, cust_add, cust_num; int u_code_num; const int MAX_ORDER_LIMIT = 20; // 支持的最大餐品份数,可按需调整 string u_code[MAX_ORDER_LIMIT]; // 用数组分别存储每一份餐品的名称、价格,避免数据覆盖 string meal_ordered[MAX_ORDER_LIMIT]; double meal_price[MAX_ORDER_LIMIT]; // 采集用户基础信息 cout << "请输入顾客姓名:"; cin.ignore(); getline(cin, cust_name); cout << "请输入顾客地址:"; getline(cin, cust_add); cout << "请输入顾客联系电话:"; getline(cin, cust_num); cout << " 需要录入多少个餐品编码?: "; cin >> u_code_num; // 输入数量超限则截断到最大支持值 if (u_code_num > MAX_ORDER_LIMIT) { u_code_num = MAX_ORDER_LIMIT; } for (int i = 0; i < u_code_num; i++) { cout << "请输入餐品编码:"; cin >> u_code[i]; if (u_code[i] == "s1") { meal_ordered[i] = "Burger"; meal_price[i] = 5.00; } else if (u_code[i] == "s2") { meal_ordered[i] = "Pizza"; meal_price[i] = 6.00; } else { cout << "餐品编码不存在!" << endl; meal_ordered[i] = "未知餐品"; meal_price[i] = 0.00; } } // 输出订单汇总 cout << "顾客姓名:" << cust_name << endl; cout << "顾客地址:" << cust_add << endl; cout << "顾客联系电话:" << cust_num << endl; cout << "Summary of Order" << endl; // 配置价格固定输出两位小数 cout << fixed << setprecision(2); for (int i = 0; i < u_code_num; i++) { // 序号从1开始,严格匹配要求的输出格式 cout << i + 1 << " * " << meal_price[i] << " " << meal_ordered[i] << endl; } return 0; }
输出效果验证
当输入餐品编码s1时,订单汇总区域输出完全符合要求:
Summary of Order 1 * 5.00 Burger
如果录入多个餐品,例如1份s1、1份s2,汇总区域会按顺序输出:
Summary of Order 1 * 5.00 Burger 2 * 6.00 Pizza
内容的提问来源于stack exchange,提问作者First Gate
相关产品推荐
相关产品推荐

