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语句(它在那里工作).我做错了什么,为什么默认情况不执行?
如果你传递除了january-dec之外的任何东西都会执行默认值因为你在切换之前测试了范围 - 你永远不会输入默认情况.
你需要做什么 - 拿走你的
std::cout <<"CORRECT DATE";
Run Code Online (Sandbox Code Playgroud)
在开关之前把它放回原来之前; - 当你的测试通过并且你没有返回false时,你会从任何情况到达那里 - 而不是 - 打破分支.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |