Member 12443636 Ответов: 3

C программа которая дает мне дату через n дней


мне нужна помощь с вводом программы на языке Си , она wrd выводит дату после n дней, например (1/1/2000)n=3--->вывод

Что я уже пробовал:

int main()lid date");
}
printf("Enter number of days\n");
scanf("%d",&n);

  return 0;
}


Добавлен код из комментария:
int main()
{
  int day=0;
  int month=0;
  int year=0;
  int n=0;
  printf("Enter the date\n");
  scanf("%d/%d/%d",&day,&month,&year);
  if(month>=1&&month<=12)
  {
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    {
      if(day>=1&&day<=31)
      {
        printf("%d/%d/%d\n",day,month,year);
      }else{
        printf("Invalid date");
      }
    }
    else if(month==4||month==6||month==9||month==11)
    {
      if(day>=1&&day<=30)
      {
        printf("%d/%d/%d\n",day,month,year);
      }else{
        printf("Invalid date");
      }
    }
    else if(month==2)
    {
      if(year%4==0)
      {
        if(year%100==0)
        {
          if(year%400==0)
          {
            if(day>=1&&day<=29)
            {
              printf("%d/%d/%d\n",day,month,year);
            }else{
              printf("Invalid date.\n");
            }
          }
          else if(day>=1&&day<=28)
          {
            printf("%d/%d/%d\n",day,month,year);
          }else{
            printf("Invalid date");
          }
        }
        else if(day>=1&&day<=29)
        {
          printf("%d/%d/%d\n",day,month,year);
        }else{
          printf("Invalid date");
        }
      }
      else if(day>=1&&day<=28)
      {
        printf("%d/%d/%d\n",day,month,year);
      }else{
        printf("Invalid date");
      }
    }
  }
  else{
    printf("Invalid date");
  }
  printf("Enter number of days\n");
  scanf("%d",&n);
  return 0;
}

[no name]

кто нибудь плз؟

[no name]

пожалуйста, кто-нибудь может мне помочь :( извините, что я так прошу о помощи, но мне нужно представить это максимум через два часа ...так что да

3 Ответов

Рейтинг:
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]

у вас есть идея, как я могу решить эту проблему, в которой я застрял из-за слабого Лола

Рейтинг:
2

Member 13503194

Создайте структуру данных даты(день, месяц и год). WAP для добавления или вычитания введенного пользователя
количество дней от него и выведите полученную дату в терминах дня, месяца и года.