C语言字符输入配合switch语句调用函数失效问题求助
C语言Switch语句无法调用处理函数问题求助
我正在编写自己的第一个“大型”C语言程序,实现套餐选择、时长输入及费用计算功能。目前遇到switch语句无法正常工作的问题:菜单可正常显示,但选择套餐后,switch语句无法调用对应套餐的处理函数,程序无任何执行效果,仅终止运行。已尝试输入大小写字母测试,但问题依旧。附上代码如下,恳请各位提供帮助!
#include <stdio.h> #include <ctype.h> int pkgA() { int hours; int pkgprice = 15; // 50小时以内的套餐价格 int extra_price = 2; // 超出50小时后的每小时价格 scanf("%i", &hours); printf("%i\n", hours); if(hours <= 50) // 50小时以内的价格 { printf("The total price is:%i\n", pkgprice); } else if(50 < hours < 720) // 计算超出50小时的费用 { int extra_hours = hours - 50; printf("%i\n", extra_hours); float total_price = extra_hours * extra_price + pkgprice; printf("The total price is:$%.2f\n", total_price); } return 0; } int pkgB() { int hours; // 用户输入的时长 int pkgprice = 20; // 100小时以内的套餐价格 float extra_price = 1.5; // 超出100小时后的每小时价格 scanf("%i", &hours); printf("%i\n", hours); if(hours <= 100) // 100小时以内的价格 { printf("The total price is:%i\n", pkgprice); } else if(100 < hours < 720) // 计算超出100小时的费用 { int extra_hours = hours - 100; printf("%i\n", extra_hours); float total_price = extra_hours * extra_price + pkgprice; printf("The total price is:$%.2f\n", total_price); } return 0; } int pkgC() { int hours; int pkgprice = 25; // 150小时以内的套餐价格 int extra_price = 1; // 超出150小时后的每小时价格 scanf("%i", &hours); printf("%i\n", hours); if(hours <= 150) // 150小时以内的价格 { printf("The total price is:%i\n", pkgprice); } else if(150 < hours < 720) // 计算超出150小时的费用 { int extra_hours = hours - 150; printf("%i\n", extra_hours); float total_price = extra_hours * extra_price + pkgprice; printf("The total price is:$%.2f\n", total_price); } return 0; } int main(void) { char package_choice; char package_verify; do { printf("Which package would you like to select? A, B, or C "); scanf(" %c", &package_choice); printf("You chose %c, correct?\n", package_choice); printf("Y/N\n"); scanf(" %c", &package_verify); } while(toupper((unsigned char)package_verify) != 'Y'); printf("You chose package %c.\n", package_choice); switch(package_choice) { case 'A': int pkgA(); break; case 'B': int pkgB(); break; case 'C': int pkgC(); break; } }
我已尝试输入大小写字母进行测试,但情况并未改变,switch语句仍未生效。再次感谢各位的帮助!
问题分析与修正方案
核心错误:函数调用写法错误
switch分支里的int pkgA();是函数声明,不是函数调用。正确的调用方式是直接写pkgA();,不需要加返回类型声明。修正后的switch部分:switch(toupper((unsigned char)package_choice)) { case 'A': pkgA(); break; case 'B': pkgB(); break; case 'C': pkgC(); break; default: printf("无效的套餐选择,请重新运行程序\n"); }这里用
toupper把输入转成大写,兼容大小写输入,同时加default分支处理无效输入。条件判断逻辑错误
C语言不支持50 < hours < 720这种连续比较写法,会被解析为(50 < hours) < 720,而50 < hours的结果是0或1,永远小于720,导致条件永远为真。需要改成逻辑与判断:else if(hours > 50 && hours < 720)所有套餐的分支条件都需要做此修正。
输出换行符错误
原代码里的换行用了错误的格式,应该改成标准的\n,否则会导致编译错误或输出异常。注释与逻辑不符
pkgC函数里的注释//The package price under 50 hours和实际逻辑(150小时以内)不符,需要修正注释避免混淆。
内容的提问来源于stack exchange,提问作者jtward17
相关产品推荐
相关产品推荐

