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/2/3)与基础价相加,而非使用对应体型的额外费用(Many1/Many2/Many3)
- 套餐2、3计算逻辑偏离需求:错误地用基础价乘以体型编号再叠加7%税费,而需求仅要求添加固定额外费用
- 输入格式错误:
scanf("%d ", &many);中的换行符会导致输入处理异常 - 缺乏输入合法性校验:未对体型选项(输入非1/2/3的情况)做校验
- 变量命名不清晰:
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
相关产品推荐
相关产品推荐

