Рейтинг:
2
Matt T Heffron
Сначала вам нужно изучить синтаксис языка C.
То, что у вас есть, показывает нам, что вы действительно не понимаете некоторые довольно Основные понятия в C.
Например:
if(month=1,3,5,7,8,10,12){
присвоит значение 1 месяцу и будет
всегда возьми ветку.
Это
нет как проверить наличие одного из набора значений.
Вы, кажется, думаете, что
=
является ли оператор сравнения равенства и что
<=
это назначение. Ни то, ни другое не верно!
Matt T Heffron
В будущем не помещайте обновленный код в "ответ".
Здесь хорошо читается.
Используйте "улучшить вопрос" в исходном вопросе, чтобы внести изменения.
На этот раз я сделал это для тебя.
Matt T Heffron
Я бы сделал это следующим образом: преобразовал входную дату в целое число, представляющее количество дней с начала некоторого контрольного года.
(Вы мог рассчитайте дни с начала года 1, не было никакого года 0, но это предполагает, что нынешняя календарная система существовала еще до того, как она была использована!)
Затем добавьте смещение числа дней (n) и преобразуйте обратно в день, месяц, год. Самая трудная часть обратного преобразования может заключаться в определении того, сколько високосных лет нужно учитывать.
Matt T Heffron
Дайте мне немного времени, чтобы составить ответ... Это займет совсем немного времени!
Matt T Heffron
Хорошо, для статеров я предполагаю, что это какая-то Форма курсовой работы (поскольку нет никакой другой очевидной причины для этого), поэтому я не собираюсь просто давать вам решение, но попытаюсь провести вас через него. (Это было бы почти тривиально в C#!)
Код, который у вас есть, "разбирает" входную дату на день, месяц и год.
(Это не очень красиво, но похоже, что это работает.)
Вам нужно будет выбрать базовый год, скажем 1600, а затем аннулировать ввод, если пользователь дает более раннюю дату, чем 1/1/1600.
Теперь вам нужна переменная для хранения рассчитанного общего количества дней с начала отчетного года.
(32-битный int позволит прожить до 5,8 миллиона лет!)
Сначала вычтите 1600 из входных данных year
значение в years
.
Вычислите количество "потенциальных" високосных лет в этом значении: years / 4
Поставь 366 1461 (= 366 + 3*365) умножьте это на переменную общего количества дней.
А потом прикиньте, сколько там было столетий: years / 100
Вычтите это число из общего числа дней (это были не високосные годы).
Затем добавьте обратно в течение лет, кратных 400: years / 400
На данный момент у вас есть количество дней от 1/1/1600 до непосредственно перед вводом пользователем года.
Теперь вам нужно добавить соответствующее количество дней к началу месяца ввода пользователем.
Если месяц после февраля, то учтите, что год является високосным годом.
Затем добавьте входное значение Дня.
Теперь это общее количество дней с 1/1/1600 до даты ввода (включительно)!!
Теперь вы можете просто добавить смещение дней (n
) к общей сумме.
Затем вы можете "раскрутить" расчет выше, чтобы получить новый день, месяц, год.
[no name]
о Нет ... я думаю, что это не сработает, если n будет большим числом :(
Рейтинг:
2
jeron1
Может быть, что-то внутри этот[^] ссылка поможет.
[no name]
это не помогло, потому что я не узнал всего этого ... я все еще нахожусь в основах
[no name]
у вас есть идея, как я могу решить эту проблему, в которой я застрял из-за слабого Лола