IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Encoder une date de naissance


Sujet :

C

  1. #1
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Encoder une date de naissance
    Bonsoir, je voudrais encoder une date de naissance, j'ai fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf("Entrez la date de naissance : ");   
    scanf("%d%d%d",&Tableau[Nb_elem_min].date_naissance.jour,&Tableau[Nb_elem_min].date_naissance.mois,&Tableau[Nb_elem_min].date_naissance.annee);
    mais quand je visualise cette même date, il me semble qu'il me laisse des détritus dans la mémoire, car il m'affiche des caractères quelconques, donc j'ai utilisé cette fonction pour vider la mémoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void vider_tempon(void)
    {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
      {
      }
    }
    Mais le résultat est le même, donc que faire, merci pour vos réponses.

    Michael.

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par IDE
    Bonsoir, je voudrais encoder une date de naissance, j'ai fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf("Entrez la date de naissance : ");   
    scanf("%d%d%d",&Tableau[Nb_elem_min].date_naissance.jour,&Tableau[Nb_elem_min].date_naissance.mois,&Tableau[Nb_elem_min].date_naissance.annee);
    mais quand je visualise cette même date, il me semble qu'il me laisse des détritus dans la mémoire, car il m'affiche des caractères quelconques, donc j'ai utilisé cette fonction pour vider la mémoire
    Il faut inviter l'utilisateur à faire une saisie correcte en lui indiquant le format, puis vérifier que le format est correct. Ensuite, il faudrait vérifier que la date est cohérente...

    Début de réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdio.h>
    #include <string.h>
     
    struct date
    {
       int jour;
       int mois;
       int annee;
    };
     
    int main (void)
    {
       struct date date_naissance;
       int n;
       do
       {
          char line[32];
          printf ("Entrez la date de naissance jj mm aaaa : ");
          fgets (line, sizeof line, stdin);
          n = sscanf (line, "%d %d %d",
                      &date_naissance.jour,
                      &date_naissance.mois, &date_naissance.annee);
       }
       while (n != 3);
     
       printf ("Ne le : %02d/%02d/%04d\n",
               date_naissance.jour, date_naissance.mois, date_naissance.annee);
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Entrez la date de naissance jj mm aaaa : 18101956
    Entrez la date de naissance jj mm aaaa : 18 101956
    Entrez la date de naissance jj mm aaaa : 18 10 1956
    Ne le : 18/10/1956
     
    Press ENTER to continue.

  3. #3
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Merci pour ta réponse, pourrais-tu m'expliquer le sscanf et pourquoi déclarer un tableau char line[32], il m'affiche bien la date mais ne m'affiche plus mon nom et mon prenom, c'est vraiment trop bizarre.

    Michael.
    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /* ----------------------------------------------------
    		       AJOUT FICHE
       ---------------------------------------------------- */
     
    int AjoutFiche( fiche_s *Tableau, int Nb_elem_min, int elem_max )
    {
     
     int c,n;
     char line[32];
     
      if ( Nb_elem_min == elem_max )
       {
     
        printf("\n\nLe tableau est plein!!!!");
        getch();
     
       }
     
         else 
           {                
     
               clrscr();
    	   printf("Entrez le nom : ");
    	    fgets((Tableau+Nb_elem_min)->nom,sizeof(Tableau+Nb_elem_min)->nom, stdin);
     
    	    /*scanf("%s",(Tableau+Nb_elem_min)->nom);*/
     
    	    /* vider_tempon();                             vidage du buffer */
     
    	   printf("Entrez le prénom : ");
    	    fgets((Tableau+Nb_elem_min)->prenom,sizeof(Tableau+Nb_elem_min)->prenom, stdin);
    	   /* scanf("%s",(Tableau+Nb_elem_min)->prenom);*/
     
    	      /* vider_tempon();*/
     
    	   printf ("Entrez la date de naissance jj mm aaaa : ");
    	    fgets (line, sizeof line, stdin);
    	           sscanf (line, "%d %d %d",
                       &Tableau[Nb_elem_min].date_naissance.jour,
                       &Tableau[Nb_elem_min].date_naissance.mois,&Tableau[Nb_elem_min].date_naissance.annee);
     
     
     
     
    	   /* scanf("%d%d%d",&Tableau[Nb_elem_min].date_naissance.jour,&Tableau[Nb_elem_min].date_naissance.mois,&Tableau[Nb_elem_min].date_naissance.annee);*/
     
    		 Nb_elem_min++;
    		 vider_tempon();
            }    
     
          return(Nb_elem_min);
    }

  4. #4
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Désolé pour le dernier message, j'ai commis une erreur dans mon code, sa fonctionne, merci Emmanuel.

    Michael

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par IDE
    Mon code :
    A mon avis, trop complexe.

    Il fait trop de choses à la fois. Pour faire une saisie, on a pas besoin de gérer en même temps la notion de tableau. Il faut faire des couches en fonction de l'organisation des données.

    Le but est ici de saisir une fiche alors on fait une fonction de saisie de fiche. Comme pour la date, c'est un peu plus compliqué, on 'descend' au niveau de structure date et on fait une fonction de saisie de date. Il n'y a pas de hasard là dedans. L'organisation des données guide la codage. Chaque niveau doit rester simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdio.h>
    #include <string.h>
    #include <conio2.h>
     
    struct date
    {
       int jour;
       int mois;
       int annee;
    };
     
    typedef struct
    {
       char nom[32];
       char prenom[32];
       struct date date_naissance;
    }
    fiche_s;
     
    int fclean (char *s, FILE * fp)
    {
       int err;
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          *p = 0;
          err = 0;
       }
       else
       {
          int c;
          while ((c = fgetc (fp)) != '\n' && c != EOF)
          {
          }
          err = 1;
       }
       return err;
    }
     
    void saisie_date (struct date *p_date)
    {
       int n;
       do
       {
          char line[sizeof "jj mm aaaa\n"];
          printf ("Entrez la date de naissance jj mm aaaa : ");
          fflush (stdout);
          fgets (line, sizeof line, stdin);
          fclean (line, stdin);
     
          /* analyse des 3 valeurs saisies. Conversion en int
              retourne le nombre de conversions reussies.
          */
          n = sscanf (line, "%d %d %d",
                      &p_date->jour, &p_date->mois, &p_date->annee);
       }
       while (n != 3);
    }
     
    void SaisieFiche (fiche_s * p_fiche)
    {
       clrscr ();
       printf ("Entrez le nom : ");
       fflush (stdout);
       fgets (p_fiche->nom, sizeof p_fiche->nom, stdin);
       fclean (p_fiche->nom, stdin);
     
       printf ("Entrez le prenom : ");
       fflush (stdout);
       fgets (p_fiche->prenom, sizeof p_fiche->prenom, stdin);
       fclean (p_fiche->prenom, stdin);
     
       saisie_date (&p_fiche->date_naissance);
    }
     
    int main (void)
    {
       fiche_s fiche;
     
       SaisieFiche (&fiche);
       printf ("%s %s\n", fiche.nom, fiche.prenom);
       printf ("Ne le : %02d/%02d/%04d\n",
               fiche.date_naissance.jour, fiche.date_naissance.mois,
               fiche.date_naissance.annee);
       return 0;
    }
    Eviter les accents (non portable)

    http://emmanuel-delahaye.developpez....#fflush_stdout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer un age depuis une date de naissance
    Par pi-2r dans le forum Langage
    Réponses: 12
    Dernier message: 03/01/2011, 21h28
  2. Age à partir d'une date de naissance
    Par NABIL74 dans le forum Bases de données
    Réponses: 6
    Dernier message: 29/01/2009, 12h43
  3. passer une date de naissance comme parametre via servlet ?
    Par haifa28 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 28/03/2007, 12h10
  4. Requete a partir d'une date de naissance pour obtenir un age
    Par Fleur-Anne.Blain dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/08/2006, 12h40
  5. Pl/SQL J'ai un âge, je voudrais une date de naissance
    Par Fleur-Anne.Blain dans le forum PL/SQL
    Réponses: 10
    Dernier message: 10/08/2006, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo