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

C++程序编译报错:变量'maxHours'未初始化就使用的问题

解决C++中"maxHours未初始化"编译错误

错误原因

编译器提示的核心问题是变量maxHours存在未被赋值的分支路径:

  • 你的代码只处理了大月(1、3、5、7、8、10、12月)和小月(4、6、9、11月)的maxHours赋值,但完全漏掉了2月的处理逻辑。编译器会判定当用户输入2月时,maxHours未被初始化就进入后续的hours > maxHours判断,触发编译错误。
  • 附带小问题:确认套餐A的else if (package == 'a' || package == 'A');末尾多了一个分号,导致后续的输出块和条件无关,无论选什么套餐都会执行那段提示。

修正后的完整代码

#include <iostream>

using namespace std;
int main()
{
    char package;
    int month;
    float hours;
    int maxHours;
    float extraHoursA = 2.0, extraHoursB = 1.0;
    float costA, costB, costC;

    //为用户提供各套餐详情
    cout << "Which package plan did you purchase? Your options are:" << endl;
    cout << "Package A: For $9.95 per month 10 hours of access are provided. Additional hours are $2.00 per hour." << endl;
    cout << "Package B: For $14.95 per month 20 hours of access are provided. Additional hours are $1.00 per hour." << endl;
    cout << "Package C: For $19.95 per unlimited access is provided." << endl << endl;

    //询问用户所选套餐
    cout << "Please enter the letter of your chosen package: ";
    cin >> package;

    //验证套餐选项有效性
    if (package != 'a' && package != 'A' && package != 'b' && package != 'B' && package != 'c' && package != 'C')
    {
        cout << "You have entered an invalid option, please try again.";
        return 0;
    }

    //确认用户所选套餐
    else if (package == 'a' || package == 'A') // 去掉末尾多余的分号
    {
        cout << endl << "You chose package A. For $9.95 per month 10 hours of access were provided. Additional hours were $2.00 per hour." << endl << endl;
    }
    else if (package == 'b' || package == 'B')
    {
        cout << endl << "You chose package B. For $14.95 per month 20 hours of access were provided. Additional hours were $1.00 per hour." << endl << endl;
    }
    else if (package == 'c' || package == 'C')
    {
        cout << endl << "You chose package C. For $19.95 per month unlimited access is provided." << endl << endl;
    }

    //询问套餐使用月份
    cout << "Which month did you utilize your plan for? Please enter the month: ";
    cin >> month;
    if (month <= 0 || month > 12)
    {
        cout << endl << "You have entered an invalid month, please try again.";
        return 0;
    }
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) // 修正:原代码误将11月归为大月,改为12月
    {
        maxHours = 744;
    } 
    else if (month == 4 || month == 6 || month == 9 || month == 11)
    {
        maxHours = 720;
    }
    else if (month == 2) // 新增2月的处理逻辑,暂时按平年计算
    {
        maxHours = 672;
        // 若需支持闰年,可添加年份输入与判断逻辑
    }
    cout << endl << "You utilized the plan in the month of " << month << endl;

    //询问使用时长
    cout << "How many hours did you use? Please enter the amount of hours you utilized: ";
    cin >> hours;


    if (hours > maxHours)
    {
        cout << "Error: Hours used cannot exceed " << maxHours << " in the " << month << "th month!";
        return 0;
    }
    if (hours < 0)
    {
        cout << "Error: Hours used cannot be less than 0";
        return 0;
    }

    // 补充完整的费用计算逻辑
    if (package == 'a' || package == 'A')
    {
        costA = 9.95;
        if (hours > 10)
        {
            costA += (hours - 10) * extraHoursA;
        }
        cout << "Your total cost is: $" << costA << endl;
    }
    else if (package == 'b' || package == 'B')
    {
        costB = 14.95;
        if (hours > 20)
        {
            costB += (hours - 20) * extraHoursB;
        }
        cout << "Your total cost is: $" << costB << endl;
    }
    else if (package == 'c' || package == 'C')
    {
        costC = 19.95;
        cout << "Your total cost is: $" << costC << endl;
    }

    return 0;
}

关键修正点

  1. 修复月份判断错误:将大月判断中的11月改为12月,纠正了原代码的逻辑错误
  2. 新增2月的maxHours赋值分支,确保所有月份场景下变量都被初始化
  3. 移除套餐A判断语句末尾的多余分号,让提示输出仅在选中A套餐时执行
  4. 补充了套餐B、C的确认提示,以及完整的费用计算逻辑(原代码未完成此部分)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:15:38