在C语言中用字符串与整数混合二维数组实现餐厅菜单系统遇问题
餐厅菜单系统的问题修复
原代码的核心问题
- 类型不匹配:用
char三维数组同时存储字符串和整数完全错误。char类型仅能处理字符,整数会被当作ASCII码解析,必然导致乱码。 - 维度逻辑混乱:
menuOfItems[6][25][6]的维度设计不符合"菜品-菜名/价格"的对应关系,三维数组不适合这个场景。 - 初始化语法错误:
"Vegetable soup"后缺失逗号,导致它和"Ice Cream"被编译器拼接成单个字符串,破坏了菜品的数量对应关系。 - printf参数缺失:
printf使用了%s和%d两个格式符,但仅传入一个参数,触发未定义行为,导致输出混乱。
正确实现方案(用结构体)
C语言中,要关联不同类型的数据(字符串+整数),结构体是最合理的选择,它能把菜名和价格封装成一个整体,逻辑清晰且类型安全。
修正后的代码:
#include <stdio.h> // 定义菜品结构体,封装菜名与价格 typedef struct { char name[50]; // 预留足够空间存储菜名 int price; // 菜品价格 } MenuItem; int main() { // 初始化6个菜品 MenuItem menuOfItems[] = { {"Pizza", 45}, {"Fish fillet", 50}, {"Vegetable soup", 40}, {"Ice Cream", 25}, {"Coca Cola", 15}, {"Mineral water", 10} }; // 自动计算菜品数量,避免硬编码 int itemCount = sizeof(menuOfItems) / sizeof(menuOfItems[0]); // 遍历打印完整菜单 for(int i = 0; i < itemCount; i++) { printf("%s -- %d\n", menuOfItems[i].name, menuOfItems[i].price); } return 0; }
代码说明
- 用
typedef struct定义MenuItem类型,每个实例包含菜名字符串和价格整数,完美匹配菜单需求。 - 初始化时直接为每个菜品赋值,一一对应,避免原代码的拼接错误。
- 通过
sizeof计算菜品数量,后续增减菜品无需修改循环条件,更灵活。 printf参数与格式符一一对应,保证输出正确。
内容的提问来源于stack exchange,提问作者Reb
相关产品推荐
相关产品推荐

