C++饮品点单程序数组统计各饮品数量错误问题求解
饮品点单程序问题修复
错误原因
- 计数数组
beverageCount未初始化,初始值为内存随机值,计数基础逻辑错误 - 每次统计用户选择前都会执行
beverageCount[choice] = 0,清空对应饮品的历史计数,导致无论选择多少次对应计数最多为1 - 未判断
choice是否为-1就操作计数数组,输入-1时会访问beverageCount[-1]造成数组越界,触发不可预期的错误 - 非法输入提示文案与实际可选值不符,实际可选值为0/1/2/3,原有提示写为1/2/3/4,易误导用户
- 总计数逻辑冗余,输入-1的操作也被计入总次数,需要额外减1修正结果
修复后完整代码
#include <iostream> #include <iomanip> using namespace std; int main() { const int size = 4; string beverage[size] = { "Coffee", "Tea", "Coke", "Orange Juice" }; // 初始化计数数组所有元素为0 int beverageCount[size] = {0}; int choice = 0; int total = 0; while (choice != -1) { cout << "请输入你想选择的饮品编号:可选择0、1、2、3,输入-1退出程序\n"; cin >> choice; // 非法值校验 while ((choice < 0 || choice > 3) && choice != -1) { cout << "输入无效,仅可选择0、1、2、3或-1,请重新输入\n"; cin >> choice; } // 仅有效选择时计数,排除终止指令-1 if (choice != -1) { beverageCount[choice]++; total++; } // 收到终止指令时输出结果 if (choice == -1) { cout << "总选择饮品数量:" << total << endl; cout << "各饮品选择次数:" << endl; for (int i=0; i<size; i++) { cout << beverage[i] << ":" << beverageCount[i] << endl; } } } return 0; }
内容的提问来源于stack exchange,提问作者Swiec223
相关产品推荐
相关产品推荐

