Получение даты в виде дд / мм / гг на языке Си и отображение даты в «юридической» форме

#c

#c

Вопрос:

Моя программа работает, но не выполняет свою задачу. Например, когда я ввожу 12/11/20 в качестве входных данных, это дает такой результат: «Датировано этим 16-м днем (null), 200».

Как я могу решить часть месяца и года в моем коде?

 #include <stdio.h>

int main()
{
    int day, mon, year;
    char *months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

    printf("Enter date(DD/MM/YY): ");
    scanf("%d%d%d", amp;day, amp;mon, amp;year);

    if(day%10 == 1 amp;amp; day != 11)
        printf("Dated this %dst day of %s, 20%d.", day, months[mon], year);

    else if(day%10 == 2 amp;amp; day != 12)
        printf("Dated this %dnd day of %s, 20%d.", day, months[mon], year);

    else if(day%10 == 3 amp;amp; day != 13)
        printf("Dated this %drd day of %s, 20%d.", day, months[mon], year);
    else
        printf("Dated this %dth day of %s, 20%d.", day, months[mon], year);

    return 0;
}
  

Результат программы, когда я ввожу 16/11/20 в качестве входных данных

Комментарии:

1. scanf("%d%d%d", amp;day, amp;mon, amp;year); ==> if (scanf("%d/%d/%d", amp;day, amp;mon, amp;year) != 3) exit(EXIT_FAILURE);

2. Похоже, что происходит сбой сопоставления , что приводит к вашему чтению day , но остальные значения не выполняются. Поскольку вы не проверяете возврат, у вас нет способа узнать. Вы не сможете правильно использовать какую-либо функцию пользовательского ввода, если не сможете проверить возврат .

3. Вы предлагаете ввести дату с косыми чертами bt, а затем сообщить scanf, что косых черт нет. Таким образом, он переходит к косой черте и прекращает попытки извлечения чисел. Если вы инициализируете свои переменные, вы увидите, что они не извлекаются. Вот почему scanf возвращает код ошибки.

4. scanf pmg должен устранить вашу проблему. Обратите внимание, что его месяцы [mon-1], поскольку массивы в c начинаются с 0.