C语言函数调用方法及菜单式点餐程序开发问题求助
嘿Daniela!你正在做的这个点餐系统项目刚好能帮你理解C语言里函数调用的核心逻辑~我来一步步给你讲清楚怎么拆分功能、调用函数,还有完整的代码示例哦
如何在C语言中通过函数实现点餐系统
第一步:先拆分功能,规划需要的函数
把项目的不同逻辑拆成独立函数,代码会更清晰易维护,你需要这几个核心函数:
- 显示菜单的函数:
void displayMenu() - 获取并验证用户选择的函数:
int getUserChoice() - 计算单类商品总价并返回商品名称的函数:
float calculateOrder(int choice, int quantity, char *itemName) - 主函数
main()负责串联所有流程
第二步:函数的声明与定义
C语言里要先声明函数(或者把函数定义放在主函数前面),不然编译器会找不到函数。先看完整的代码结构:
#include <stdio.h> #include <stdlib.h> #include <string.h> // 用于字符串拷贝 // 商品价格常量定义 #define TEQUENOS_PRICE 5.00 #define AREPA_PRICE 3.00 #define CACHAPA_PRICE 2.50 #define EMPANADA_PRICE 2.00 #define SODA_PRICE 0.80 #define QUESILLO_PRICE 1.70 // 函数声明(告诉编译器这些函数的存在) void displayMenu(); int getUserChoice(); float calculateOrder(int choice, int quantity, char *itemName); // 显示菜单的函数定义 void displayMenu() { printf("\n=== 拉美小吃点餐系统 ===\n"); printf("1. Tequeños - $%.2f\n", TEQUENOS_PRICE); printf("2. Arepa - $%.2f\n", AREPA_PRICE); printf("3. Cachapa - $%.2f\n", CACHAPA_PRICE); printf("4. Empanada - $%.2f\n", EMPANADA_PRICE); printf("5. Soda - $%.2f\n", SODA_PRICE); printf("6. Quesillo - $%.2f\n", QUESILLO_PRICE); printf("0. 退出点餐\n"); printf("请输入商品编号:"); } // 获取并验证用户选择的函数定义 int getUserChoice() { int choice; scanf("%d", &choice); // 验证输入是否合法 while (choice < 0 || choice > 6) { printf("无效编号!请输入0-6之间的数字:"); scanf("%d", &choice); } return choice; } // 计算总价并返回商品名称的函数定义 float calculateOrder(int choice, int quantity, char *itemName) { float itemTotal = 0.0; switch(choice) { case 1: strcpy(itemName, "Tequeños"); itemTotal = TEQUENOS_PRICE * quantity; break; case 2: strcpy(itemName, "Arepa"); itemTotal = AREPA_PRICE * quantity; break; case 3: strcpy(itemName, "Cachapa"); itemTotal = CACHAPA_PRICE * quantity; break; case 4: strcpy(itemName, "Empanada"); itemTotal = EMPANADA_PRICE * quantity; break; case 5: strcpy(itemName, "Soda"); itemTotal = SODA_PRICE * quantity; break; case 6: strcpy(itemName, "Quesillo"); itemTotal = QUESILLO_PRICE * quantity; break; default: strcpy(itemName, "无"); itemTotal = 0.0; } return itemTotal; } // 主函数:调用所有子函数完成流程 int main() { int choice, quantity; char itemName[50]; float totalPrice = 0.0; char keepOrdering; do { // 调用显示菜单函数 displayMenu(); // 调用获取选择函数,把返回值存到choice变量里 choice = getUserChoice(); if (choice == 0) break; printf("请输入购买数量:"); scanf("%d", &quantity); // 调用计算函数,传入选择、数量,同时通过指针获取商品名称 float currentTotal = calculateOrder(choice, quantity, itemName); totalPrice += currentTotal; printf("已添加 %d 份 %s,小计:$%.2f\n", quantity, itemName, currentTotal); printf("是否继续点餐?(Y/N):"); scanf(" %c", &keepOrdering); // 前面加空格跳过输入残留的换行符 } while (keepOrdering == 'Y' || keepOrdering == 'y'); printf("\n=== 订单结算 ===\n"); printf("您的订单总金额:$%.2f\n", totalPrice); printf("感谢光临!\n"); return 0; }
函数调用的核心要点
- 调用格式:直接写函数名+参数,比如
displayMenu()不需要参数就直接调用;choice = getUserChoice()会把函数返回的结果赋值给变量 - 参数传递:如果需要函数修改主函数里的变量(比如商品名称),要用指针传递(比如
char *itemName),不然函数内部的修改不会影响外部 - 返回值:函数可以返回一个值(比如
getUserChoice()返回用户输入的数字),如果不需要返回值就用void声明
内容的提问来源于stack exchange,提问作者Daniela Ostos
相关产品推荐
相关产品推荐

