我有這個函數檢查日期是否在範圍內。默認情況下不會執行C++
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;
}
雖然代碼工作在它返回真假,它應該,在default:
情況下,從來沒有被選中,即使日期是正確的,例如在in_day = 17, in_month = 9, in_year = 1999
。起初我在默認情況下有return true;
,但它永遠不會返回true,並且在運行調試器後,我發現默認情況下從未運行過,所以我將return
移出switch語句(它在那裏工作)。我做錯了什麼,爲什麼不執行默認情況?你永遠不輸入默認的情況下 - 如果你通過任何東西,除了一月至十二月 既然你測試開關前的範圍
「1月」,「二月」等定義在哪裏? –
「1月,2月」等定義在哪裏? – Malice
你應該用所有警告和調試信息編譯你的代碼(如果使用[GCC](http://gcc.gnu.org/),'g ++ -Wall -Wextra -g')然後**使用調試器* *('gdb')。你的修復我的代碼問題在這裏脫離主題。 –