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

PETS SPA项目:C语言实现按狗狗体型添加额外收费功能求助

M.A.C PETS SPA 程序错误修复方案

问题说明

开发M.A.C PETS SPA的C语言程序时遇到逻辑错误:选择套餐1(CLEAN UP Special,$20.00)且狗狗为中型时,期望总费用为20.00+15.00=35.00,但当前代码无法正确计算。程序需求为:用户选择服务套餐后,选择狗狗体型(小型、中型、大型),程序需根据所选体型添加对应额外费用。尝试使用循环未解决问题,怀疑需新增循环或使用struct。

核心错误分析

  1. 套餐1计算逻辑错误:直接将体型选项编号(1/2/3)与基础价相加,而非使用对应体型的额外费用(Many1/Many2/Many3)
  2. 套餐2、3计算逻辑偏离需求:错误地用基础价乘以体型编号再叠加7%税费,而需求仅要求添加固定额外费用
  3. 输入格式错误:scanf("%d ", &many);中的换行符会导致输入处理异常
  4. 缺乏输入合法性校验:未对体型选项(输入非1/2/3的情况)做校验
  5. 变量命名不清晰:many、Many1等命名无法直观体现用途,增加维护难度

修复后的代码

#include <stdio.h>

int main(void) {
    int package_option;
    int size_option;
    // 套餐基础价格
    const float CLEAN_UP = 20.00f;
    const float THE_WORKS = 30.00f;
    const float FULL_GROOM = 40.00f;
    // 体型对应的额外费用:索引0对应小型,1对应中型,2对应大型
    const float size_surcharges[] = {0.00f, 5.00f, 15.00f};
    float total_price;

    while (1) {
        // 打印菜单
        printf("-------------Welcome-------------\n");
        printf("**********M.A.C PETS SPA*********\n");
        printf("     choose from our Specials     \n");
        printf("---------------------------------\n");
        printf("[1] CLEAN UP Special includes General shower and haircut - $20.00\n");
        printf("-----------------------------------------------------\n");
        printf("[2] THE WORKS Special includes General shower, haircut, ear cleaning, and nail trim - $30.00\n");
        printf("-----------------------------------------------------\n");
        printf("[3] FULL GROOM Special includes Breed appropriate shower, specific haircut, nail trim, ear cleaning, bandana and cologne - $40.00\n");
        printf("-----------------------------------------------------\n");

        // 选择套餐
        printf("Enter your special number: ");
        scanf("%d", &package_option);

        if (package_option < 1 || package_option > 3) {
            printf("Invalid item number! Re-enter item number\n\n");
            continue;
        }

        // 选择体型
        printf("\nWhat size is your dog?: \n");
        printf("[1]: small\n");
        printf("[2]: medium\n");
        printf("[3]: Large\n");
        printf("Enter size number: ");
        scanf("%d", &size_option);

        if (size_option < 1 || size_option > 3) {
            printf("Invalid size number! Please re-enter\n\n");
            continue;
        }

        // 计算总费用:基础价 + 对应体型额外费用
        switch(package_option) {
            case 1:
                total_price = CLEAN_UP + size_surcharges[size_option - 1];
                break;
            case 2:
                total_price = THE_WORKS + size_surcharges[size_option - 1];
                break;
            case 3:
                total_price = FULL_GROOM + size_surcharges[size_option - 1];
                break;
            default:
                total_price = 0.0f;
        }

        printf("\nTotal Price including extra charge for the size is = $%.2f\n", total_price);
        break;
    }

    return 0;
}

修复要点说明

  • 统一计算逻辑:所有套餐均采用「基础价 + 对应体型额外费用」的计算方式,完全符合需求
  • 数组存储额外费用:用数组size_surcharges对应体型选项,比多个独立变量更易维护
  • 输入合法性校验:对套餐和体型选项都做了1-3的范围校验,避免无效输入导致错误
  • 优化变量命名:使用CLEAN_UP、size_option等直观命名,提升代码可读性
  • 修复输入格式:移除scanf中的多余换行符,确保输入处理正常
  • 无需额外循环或struct:当前逻辑通过简单的分支判断和数组即可实现需求,无需复杂结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:35:21