format de date jj.mm.aaa en C

Je veux savoir s’il existe un moyen de lire la date à partir de la console au format jj.mm.yyyy en C. J’ai une structure avec des informations pour la date. J’ai essayé avec une autre structure juste pour la date avec le jour, le mois et l’année:

typedef struct { int day; int month; int year; } Date; 

mais les points sont un problème. Une idée?

Essayer:

  Date d; if (scanf("%d.%d.%d", &d.day, &d.month, &d.year) != 3) error(); 

Vous pouvez utiliser strptime() pour lire une chaîne de date au format arbitraire dans un struct tm .

 #define _XOPEN_SOURCE /* glibc2 needs this to have strptime(). */ #include  #include  #include  #include  ... Date d = {0}; char * fmt = "%d.%m.%Y"; char s[32] = ""; char fmt_scanf[32] = ""; int n = 0; sprintf(fmt_scanf, "%%%ds", sizeof(s) - 1); /* Created format ssortingng for scanf(). */ errno = 0; if (1 == (n = scanf(fmt_scanf, s))) { struct tm t = {0}; char * p = strptime(s, fmt, &t); if ((s + strlen(s)) != p) { fprintf(stderr, "invalid date: '%s'\n", s); } else { d.day = t.tm_mday; d.month = t.tm_mon + 1; /* tm_mon it zero-based. */ d.year = t.tm_year + 1900; /* tm_year is years since 1900. */ } } else { perror("scanf()"); } 

Mise à jour :

Les effets secondaires positifs et les avantages supplémentaires découlant de cette démarche sont les suivants:

  • Aucune validation d’entrée n’est nécessaire, car tout est fait par strptime() .
  • Changer le format de saisie est simple: laissez simplement fmt pointer sur une chaîne de format différente.