我有这个函数来检查日期是否在范围内。
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语句(它在那里工作)。我做错了什么,为什么不执行默认情况?
答案 0 :(得分:5)
默认值 由于您在切换之前测试了范围 - 您永远不会输入默认情况。
你需要做什么 - 拿走你的
std::cout <<"CORRECT DATE";
从开关中取出并返回true之前; - 当你的测试通过并且你没有返回false时,你将从任何情况到达那里 - 而不是 - 打破分支。