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"); }
多笔订单连续录入逻辑
把「打印菜单-获取用户输入-存入订单」的逻辑套在循环里即可,需要加两个边界判断:
- 设置退出点单的特殊输入值,比如约定用户输入
0就结束点单进入账单计算环节 - 每次写入前判断
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
相关产品推荐
相关产品推荐

