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
|
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);
}
while(jour>31 || mois>12 || annee<100);
// condition qui récupere que les 3 derniers chiffres de l'année entrée
if (annee>999)
{
while (annee-1000>=0){annee=annee-1000;}
}
// attention aux mois avec seulement 30 jours
if ((mois==4 && jour>30) || (mois==6 && jour>30) || (mois==9 && jour>30) || (mois==11 && jour>30)){
do{
printf ("Ce mois ne comporte que 30 jours.\nRessaisissez le jour:\n");
scanf("%d",&jour);
getchar();
}
while (jour>30 || jour<1);
}
if (mois == 2 && jour>28){
// si le année est divisible par 4 elle est bissectille sauf si une année multiple de 100 n'est pas multiple de 400
if(annee%4==0){
if (annee%100==0 && annee%400!=0){
do{
printf ("Ce mois comporte 28 jours.\nRessaisissez le jour:\n");
scanf("%d",&jour);
getchar();
}
while (jour>28 || jour<1);
}
else if (jour>29) {
do{
printf ("Ce mois comporte 29 jours.\nRessaisissez le jour:\n");
scanf("%d",&jour);
getchar();
}
while (jour>29 || jour<1);
}
}
else {
do{
printf ("Ce mois ne comporte que 28 jours.\nRessaisissez le jour:\n");
scanf("%d",&jour);
getchar();
}
while (jour>28 || jour<1);
}
}// fin if (mois==2)
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;
if (mktime(tm)==-1){printf("%s\n",strerror(errno));}
printf("lelelalal %lf\n", mktime(tm));
} |
Partager