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

C语言如何向结构体数组添加单条及多条订单元素

实现方法

你需要先新增一个计数器变量,记录当前已录入的订单数量,用来标记order数组的下一个可用写入位置,初始值设为0即可:

int order_count = 0;

单笔选中菜品存入逻辑

拿到用户输入的choice后先做合法性判断:

  • 有效选择范围可以根据你的菜单编号规则调整,如果菜单从1开始给用户展示选项,就判断输入值是否在14区间,取对应菜品时数组下标减1即可;如果是从0开始编号,就判断输入是否在03区间
  • 校验通过后,直接把对应菜品的结构体赋值给order[order_count],C语言支持结构体直接赋值,菜品名称、价格会自动拷贝,不需要手动逐字段复制
  • 赋值完成后将order_count自增1,代表订单数+1,下一笔订单会自动写入数组的下一个空闲位置

核心代码片段:

// 假设菜单给用户展示的选项是1. Champagne 2. Pineau... 对应输入1~4
if (choice >=1 && choice <=4 && order_count <50) {
    // 输入1对应数组下标0,所以减1匹配数组索引
    order[order_count] = french_dishes[choice - 1];
    order_count++;
    printf("菜品添加成功\n");
} else {
    printf("输入无效,请重新选择\n");
}

多笔订单连续录入逻辑

把「打印菜单-获取用户输入-存入订单」的逻辑套在循环里即可,需要加两个边界判断:

  1. 设置退出点单的特殊输入值,比如约定用户输入0就结束点单进入账单计算环节
  2. 每次写入前判断order_count是否已经到50(order数组的最大长度),如果满了就提示不能再加单,避免数组越界引发程序崩溃

完整参考代码:

#include <stdio.h>

struct Food_item
{
    char name[50];
    float price;
};

typedef struct Food_item food;
food french_dishes[4]={{"Champagne",450},{"Pineau",250},{"Monaco",350},{"French Cider",400}};
food order[50];

int main() {
    int order_count = 0;
    int choice = -1;
    float total = 0;

    printf("=== 法式餐品点单系统 ===\n");
    while(1) {
        // 循环打印菜单
        printf("\n当前可选菜品:\n");
        for(int i=0; i<4; i++) {
            printf("%d. %s  价格:%.2f\n", i+1, french_dishes[i].name, french_dishes[i].price);
        }
        printf("0. 结束点单,计算账单\n");
        printf("请输入选择:");
        scanf("%d", &choice);

        // 判断是否退出点单
        if(choice == 0) {
            break;
        }

        // 判断订单容量是否已满
        if(order_count >= 50) {
            printf("订单已达50个菜品上限,无法添加更多内容\n");
            break;
        }

        // 校验输入并存入订单
        if(choice >=1 && choice <=4) {
            order[order_count] = french_dishes[choice -1];
            total += order[order_count].price;
            printf("已添加:%s\n", order[order_count].name);
            order_count++;
        } else {
            printf("输入无效,请输入1-4选择菜品,输入0结束点单\n");
            // 清空输入缓冲区,避免用户输入非数字导致程序死循环
            while(getchar() != '\n');
        }
    }

    // 打印最终账单
    printf("\n=== 您的消费账单 ===\n");
    for(int i=0; i<order_count; i++) {
        printf("%d. %s  ¥%.2f\n", i+1, order[i].name, order[i].price);
    }
    printf("消费总计:¥%.2f\n", total);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:45:44