默认情况下不会执行c ++

Dim*_*mos 1 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;

}
Run Code Online (Sandbox Code Playgroud)

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

Art*_*sky 5

如果你传递除了january-dec之外的任何东西都会执行默认值因为你在切换之前测试了范围 - 你永远不会输入默认情况.

你需要做什么 - 拿走你的

std::cout <<"CORRECT DATE";
Run Code Online (Sandbox Code Playgroud)

在开关之前把它放回原来之前; - 当你的测试通过并且你没有返回false时,你会从任何情况到达那里 - 而不是 - 打破分支.