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

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语句仍未生效。再次感谢各位的帮助!


问题分析与修正方案

  1. 核心错误:函数调用写法错误
    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分支处理无效输入。

  2. 条件判断逻辑错误
    C语言不支持50 < hours < 720这种连续比较写法,会被解析为(50 < hours) < 720,而50 < hours的结果是0或1,永远小于720,导致条件永远为真。需要改成逻辑与判断:

    else if(hours > 50 && hours < 720)
    

    所有套餐的分支条件都需要做此修正。

  3. 输出换行符错误
    原代码里的换行用了错误的格式,应该改成标准的\n,否则会导致编译错误或输出异常。

  4. 注释与逻辑不符
    pkgC函数里的注释//The package price under 50 hours和实际逻辑(150小时以内)不符,需要修正注释避免混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:54:56