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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:44:04