1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <stdio.h>
#define QUITTE(x) { \
printf (x"\n"); \
return -1; \
}
#define CHECKNDISPLAY(x, y) { \
if (jour < 1 || jour > y) QUITTE("c'est un jour qui n'existe pas") \
else { \
printf("Le %d %s %d\n", jour, x, annee); \
break; \
} \
}
int main(void) {
int date, jour, mois, annee, lus, ok, max_jours_fevrier;
/* saisie de la date et "decoupage" en jour/mois/annee */
printf("Saisir une date du 21e siecle JJMMYY : ");
ok = scanf("%d%n", &date, &lus);
jour = date / 10000;
mois = (date / 100) % 100;
annee = 2000 + (date % 100);
/* validation de la date/du timestamp */
if (lus != 6 || ok != 1 || date < 0) QUITTE("saisie invalide")
if (annee < 2001) QUITTE("une date du 21e siecle on a dit")
if (mois < 1 || mois > 12) QUITTE("c'est quel mois ca ??")
/* on determine juste le nombre de jours pour le mois de fevrier (annees bisextiles) */
if ((annee % 4) == 0) max_jours_fevrier = 29; else max_jours_fevrier = 28;
/* et on affiche dans la foulee, le chek sur le jour est inclu */
switch (mois) {
case 1 : CHECKNDISPLAY("Janvier", 31)
case 2 : CHECKNDISPLAY("Fevrier", max_jours_fevrier)
case 3 : CHECKNDISPLAY("Mars", 31)
case 4 : CHECKNDISPLAY("Avril", 30)
case 5 : CHECKNDISPLAY("Mai", 31)
case 6 : CHECKNDISPLAY("Juin", 30)
case 7 : CHECKNDISPLAY("Juillet", 31)
case 8 : CHECKNDISPLAY("Aout", 31)
case 9 : CHECKNDISPLAY("Septembre", 30)
case 10 : CHECKNDISPLAY("Octobre", 31)
case 11 : CHECKNDISPLAY("Novembre", 30)
case 12 : CHECKNDISPLAY("Decembre", 31)
}
return 0;
} |
Partager