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

在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;
}

代码说明

  1. 用typedef struct定义MenuItem类型,每个实例包含菜名字符串和价格整数,完美匹配菜单需求。
  2. 初始化时直接为每个菜品赋值,一一对应,避免原代码的拼接错误。
  3. 通过sizeof计算菜品数量,后续增减菜品无需修改循环条件,更灵活。
  4. printf参数与格式符一一对应,保证输出正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:25:42