我很新的C++和試圖找出如何解決這個問題,所以任何幫助,絕對讚賞。我需要以「yyyy/mm/dd,hh:mm」的形式從用戶處獲取日期輸入,然後驗證其功能並驗證其零件。 到目前爲止,我已經嘗試了一切,我已經學會了,最小錯誤的最佳解決方案是以下代碼。還有一個我不能修改的預定義測試客戶端代碼。客戶端代碼中有很多步驟,每個驗證都經過測試。例如:以用戶的「yyyy/mm/dd,hh:mm」格式輸入日期並在C++中驗證日期?
一個輸入是「2000/1/50」,我得到DAY_ERROR,這是真的。 另一個輸入是「2000/1/1,25:10」,我得到HOUR_ERROR也是如此。一切都很好,直到最後一部分(檢查分鐘)。當輸入是「2000/1/1,23:60」時,我再次獲得HOUR_ERROR而不是MIN_ERROR。 我不確定是否因爲「,」之後的空格。但是,如果是這種情況,我不知道如何解決它。
std::istream& Date::read(std::istream& is = std::cin) {
int year;
int mon;
int day;
int hour;
int min;
bool valid;
((((is >> year).ignore(100, '/') >> mon).ignore(100, '/') >> day).ignore(100, ',') >> hour).ignore(100, ':') >> min;
bool val_year = sizeof(year) == 4 && year >= MIN_YEAR && year <= MAX_YEAR;
bool val_mon = mon >= 1 && mon <= 12;
bool val_day = day >= 1 && day <= mday();
bool val_hour = sizeof(hour) == 2 && hour >= 0 && hour <= 23;
bool val_min = sizeof(min) == 2 && min >= 0 && min <= 59;
valid = val_year && val_mon && val_day && val_hour && val_min;
if (valid) {
errCode(NO_ERROR);
Date D2(year, mon, day, hour, min);
}
else {
if (!val_year)
errCode(YEAR_ERROR);
else if (!val_mon)
errCode(MON_ERROR);
else if (!val_day)
errCode(DAY_ERROR);
else if (!val_hour)
errCode(HOUR_ERROR);
else if (!val_min)
errCode(MIN_ERROR);
else
errCode(NO_ERROR);
}
}
return is;
}