У меня проблема с этим кодом, я не понимаю, как работает эта функция. Мне нужно проверить вход пользователя, чтобы проверить, действительна ли дата их размещения. И если это не я устанавливаю код ошибки. Таким образом, в моей функции чтения I cin
дата затем проверяет ввод и вызывает mdays()
, однако по какой-то причине я не знаю, как проверить в инструкции if if функцию чтения, если дата подтверждена или нет.Объясните этот високосный год Функция C++
int Date::mdays() const
{
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, -1};
int mon = _mon >= 1 && _mon <= 12 ? _mon : 13;
mon--;
return days[mon] + int((mon == 1)*((_year % 4 == 0) &&
(_year % 100 != 0)) || (_year % 400 == 0));
}
У вас есть базовое число дней в массиве. Есть один специальный случай, когда вам нужно добавить его, и это февраль в високосный год. Второй операнд '+' оценивается в 1 в этом случае и 0 в противном случае. – chris
Одна вещь, неверная в этой функции, заключается в том, что она делает слишком много вещей: диапазон проверяет месяцы, вычисляет високосный год, вычисляет последний день месяца. См. Http://howardhinnant.github.io/date_algorithms.html#last_day_of_month для простых, эффективных и компактных алгоритмов даты. –