默认情况下没有执行c ++

时间:2017-08-26 06:34:52

标签: c++ switch-statement

我有这个函数来检查日期是否在范围内。

bool check_date(const int &in_day, const int &in_month, const int &in_year)
{
    if (in_year < 1582)
        return false;
    else if (in_year == 1582 && in_month < october)
        return false;
    else if (in_month < 1 || in_month > 12)
        return false;

    switch (in_month)
    {
    case january:       // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;

    case february:      // 28 days, 29 if leap.
        if (is_leap(in_year))
        {
            if (in_day > 29 || in_day < 1)
                return false;
        }
        else
        {
            if (in_day > 28 || in_day < 1)
                return false;
        }

    case march:         // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;

    case april:         // 30 days
        if (in_day < 1 || in_day > 30)
            return false;
        break;

    case may:           // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;

    case june:          // 30 days
        if (in_day < 1 || in_day > 30)
            return false;
        break;

    case july:          // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;

    case august:        // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;

    case september:     // 30 days
        if (in_day < 1 || in_day > 30)
            return false;
        break;

    case october:       // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;

    case november:      // 30 days
        if (in_day < 1 || in_day > 30)
            return false;
        break;

    case december:      // 31 days
        if (in_day < 1 || in_day > 31)
            return false;
        break;
    default:
        std::cout <<"CORRECT DATE";
    }

    return true;

}

虽然代码在其中工作,但在它应该的地方返回true和false,default:情况永远不会被选中,即使日期正确,例如in_day = 17, in_month = 9, in_year = 1999。起初我在默认情况下有return true;,但它永远不会返回true,并且在运行调试器后我发现默认情况从未运行过,所以我将return移出switch语句(它在那里工作)。我做错了什么,为什么不执行默认情况?

1 个答案:

答案 0 :(得分:5)

如果你传递除了january-dec之外的任何东西,将执行

默认值 由于您在切换之前测试了范围 - 您永远不会输入默认情况。

你需要做什么 - 拿走你的

std::cout <<"CORRECT DATE";

从开关中取出并返回true之前; - 当你的测试通过并且你没有返回false时,你将从任何情况到达那里 - 而不是 - 打破分支。