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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <errno.h>
#include "eleve.h"
typedef struct classe
{
char nom[30];
char enseignant[30];
int nbEleve;
eleve_t *eleves;
struct classe *suivant;
}classe_t;
typedef struct ecole
{
char nom[30];
char directeur[30];
int annee;
int nbClasse;
classe_t *classes;
}ecole_t;
int verifieDate(unsigned short jj, unsigned short mm, unsigned short aa)
{
if (jj > 31) return -1;
if (mm > 12) return -2;
if (jj == 31 && (mm == 2 || mm == 4 | mm == 6 || mm == 9 || mm == 11))
return -3;
if (jj == 30 && mm == 2)
return -4;
if (jj == 29 && mm == 2 && ((aa%4) != 0 || ((aa%100) == 0 && (aa%400) != 0)))
return -5;
return 0;
}
void SaisirDate(char * date,struct tm * tm)
{
int jour, mois, annee, lg, i;
char conf=' ';
do{
// saisi de la date
//do de verif des valeurs rentrées par l'utilisateur
do{
// do qui permet de verifier que l'utilisateur rentre assez de caracteres et se sert de separateurs
do{
printf("saisir date au format jj/mm/aaa ou jj/mm/aaaa\n");
gets(date);
lg=strlen(date);
}
while(lg<7);
//Remplacement des separateur par * pour eviter que la fonction sscanf plante
for (i=0;i<lg;i++)
{
if(isdigit(date[i])==0)date[i]='*';
}
//lecture de la chaine et extraction de la date
sscanf(date,"%d*%d*%d", &jour, &mois, &annee);
// Vérif de la date saisie
if (verifieDate(jour, mois, annee) == 0) break;
printf("Date incorrecte - Recommencez\n");
}
while((jour>31 || mois>12 || annee<100)||(verifieDate(jour, mois, annee) < 0));
printf("vous avez saisi: %d %d %d\n",jour,mois,annee);
printf("Confirmez vous? o ou y pour oui\n");
conf=getchar();
(char)conf;
conf=toupper(conf);
getchar();
}// fin du do de confirmation de la saisie
while (conf!='O' && conf!= 'Y');
// initialisation a zero de la structure tm
memset(tm,0,sizeof(tm));
// sauvegarde des donnée dans la structure tm
tm->tm_mday = jour;
tm->tm_mon = mois -1;// -1 car le tableau commence a zero et non a un
tm->tm_year= annee-1900;
if (mktime(tm)==-1){printf("%s\n",strerror(errno));}
printf("\tmk time renvoit... %d\n", mktime(tm));
}
main()
{
char date[20];
struct tm dateNaiss={0};
SaisirDate(date,&dateNaiss);
printf(" Le petit ordi a compris....%d %d %d\n",dateNaiss.tm_mday,dateNaiss.tm_mon,dateNaiss.tm_year);
} |
Partager