Альтернативное форматирование данных - PullRequest
0 голосов
/ 25 марта 2019

У меня есть два объекта struct, в которых хранятся две разные даты. Я хочу убедиться, что они имеют формат (дд / мм / гггг) | (дд-мм-гггг), а затем принять разницу их.

Распечатайте stderror, если он не в формате дд / мм / гггг, однако он не поддерживает оба формата.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <errno.h>

/*
# Objective: date1.c is to write in two dates and determine the difference 
in the number of days between them.
Must be date inputs must be written into console as <day>/<month>/<year> | 
<day>-<month>-<year>
*/ 

int minimumYear = 0; // O AD
int maximumYear = 10000; // 10000 AD

// Struct for the date
typedef struct {
    int dd;
    int mm;
    int yyyy;
} dateFormat; 

Главный источник путаницы ...

int main() {
    dateFormat getDate1;
    dateFormat getDate2;

    //input correct date
    fprintf(stderr, "Enter date in format (day/month/year): ");
    scanf("%d/%d/%d", &getDate1.dd, &getDate1.mm, &getDate1.yyyy);

    fprintf(stderr, "Enter date in format (day/month/year): ");
    scanf("%d/%d/%d", &getDate2.dd, &getDate2.mm, &getDate2.yyyy);


}

1 Ответ

2 голосов
/ 25 марта 2019

Вы должны прочитать входные данные как строку в массив с fgets() и попытаться проанализировать его с sscanf() в соответствии с обоими форматами.Пожаловаться, если ни один из форматов не соответствует вводу:

int main() {
    char buf[128];
    dateFormat getDate1;

    //input correct date
    fprintf(stderr, "Enter date in format (day/month/year): ");
    if (!fgets(buf, sizeof buf, stdin)) {
        fprintf(stderr, "premature end of file\n");
        return 1;
    }
    if (sscanf(buf, "%d/%d/%d", &getDate1.dd, &getDate1.mm, &getDate1.yyyy) != 3
    &&  sscanf(buf, "%d-%d-%d", &getDate1.dd, &getDate1.mm, &getDate1.yyyy) != 3) {
        fprintf(stderr, "invalid date: %s", buf);
        return 1;
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...