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

单个函数正常,跨函数传递变量失效的C语言计费程序问题

问题修复:网络套餐计费程序的返回值传递错误

核心错误点及修复方案

  • inputHours函数未返回输入时长
    该函数声明为int inputHours(),但函数末尾缺少返回语句,导致调用时获取的是随机垃圾值——这就是输入51小时却算出15美元的根本原因,实际传递给pkgA的不是51,而是某个小于等于50的随机数。
    修复:在inputHours函数末尾添加return hours;

  • main函数存在无效代码
    代码里的inputHours;只是引用函数名,没有实际调用,属于无效代码,直接删除即可。

修复后的完整代码

#include <stdio.h>
#include <ctype.h>

int inputHours()
{
    int hours;
    char hours_verify;

    do
    {
        do
        {
            printf("Number of hours from 0 to 720: ");
            scanf(" %i", &hours);
        }while(hours<0||hours>720);
        
        printf("%i hours, correct?\n", hours);
        printf("Y/N\n");
        scanf(" %c", &hours_verify);
        
    }while(toupper((unsigned char)hours_verify) != 'Y');
    
    printf("%i hours of internet were used.\n", hours);
    return hours; // 添加返回语句,返回用户输入的时长
}

int pkgA(int hours)
{
    int pkgprice= 15; // 50小时以内基础价
    int extra_price= 2; // 超出50小时后的每小时价格

    if(hours<=50)
    {
        printf("The total price is:$%i", pkgprice);
    }
    else if(hours<=720)
    {
        int extra_hours=hours - 50;
    
        float total_price=extra_hours * extra_price + pkgprice;
        printf("The total price is:$%.2f", total_price);
    }
    return 0;
}

int main(void)
{
    char package_choice;
    char package_verify;

    do
    {
        do{
            printf("Which package would you like to select? A, B, or C ");
            scanf(" %c", &package_choice);
        }while(toupper((unsigned char)package_choice) != 'A' 
               && toupper((unsigned char)package_choice) != 'B' 
               && toupper((unsigned char)package_choice) != 'C');
        
        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);
    
    int hours=inputHours(); // 正确调用函数并接收返回值
    
    switch(package_choice)
    {
    case 'A':
        pkgA(hours);
        break;
        
    case 'B':
        // pkgB(hours); 后续可补充实现
        break;
        
    case 'C':
        // pkgC(hours); 后续可补充实现
        break;
    }
}

内容的提问来源于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 09:02:58