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 :

structure de fiche de personne


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut structure de fiche de personne
    salut,

    pouriez vous me corrigez mon code

    voila l'ennonce

    un fichier definit une personne par les informations suivants
    -nom
    -prenom
    -adresse{num rue
    nom rue
    code postale
    ville
    }
    -telephone
    -date de naissance
    {jour
    mois
    anné
    }

    Apres avoir definit les structures de donne necessaire,ecrire en c les fonctions suivants

    remplir_tab ; qui permet de remplir un tableau de fiches

    rech_nom ;qui permet de rechercher une personne de nom donné

    rech_codp :qui permet de rechercher une personne avec un code postale donne


    voila ma solution

    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
    struct adresse
    {int num;
     char rue[50];
     int codepostal;
     char ville[50];
     };
     struct date
     {int jour;
     int mois;
     int anne;
     };
     struct fiche
     {
      char nom[50];
      char prenom[50];
      int telephonne;
      struct adresse ad;
      struct date da;
      };
    struct fiche tab[50];
    void remplir_tab(struct fiche *tab,int n)// n est la taille du tableau
    {
    int i;
    for(i=0;i<n;i++)
    {printf("donner le nom et le prenom");
    for(i=0;i<50;i++)
      {
     scanf("%c%c",&tab[i].nom[i],&tab[i].prenom[i]);
      }
      printf("donner num et codepostal");
      scanf("%d%d",&tab[i].ad.num,&tab[i].ad.codepostal);
      printf("donner rue et ville");
      for(i=0;i<50;i++)
      {
       scanf("%c%c",&tab[i].ad.rue[i],&tab[i].ad.ville[i]);
       }
     
    }
    }
    void rech_nom(struct fiche *tab,char *nom,int n);
    {int i,trouve=0;
    for(i=0;(i<n)&&(trouve==0);i++)
    {
    if(tab[i].nom[i]==nom[i])
    trouve=1;
    }
    }
    void rech_codp(struct fiche *tab,int codp,int n);
    {int i,trouve=0;
    for(i=0;(i<n)&&(trouve==0);i++)
    {
    if(tab[i].ad.codepostal==codp)
    touve=1;
    }
    }

    pouver le corriger si elle a des erreurs

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Sur remplir_tab()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<50;i++)
      {
     scanf("%c%c",&tab[i].nom[i],&tab[i].prenom[i]);
      }
    ceci impose de rentrer la première lettre du premier nom puis celle du prénom, puis la seconde lettre du second nom, puis celle du prénom,...

    Utiliser par exemple un format %s plutôt que %c

    Idem pour l'adresse.

    - Sur rech_nom()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i=0;(i<n)&&(trouve==0);i++)
    {
    if(tab[i].nom[i]==nom[i])
    trouve=1;
    }
    Pourquoi comparer la première lettre du premier nom avec la première lettre de nom, puis la deuxième lettre du deuxième nom avec la deuxième lettre de nom,...
    Pour comparer des chaines de caractères, utiliser strcmp.

    -De plus, il y a des fautes de frappe (dans rech_codp() : touve=1)

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    je peux faire comme ca


    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
     
    struct adresse
    {int num;
     char rue[50];
     int codepostal;
     char ville[50];
     };
     struct date
     {int jour;
     int mois;
     int anne;
     };
     struct fiche
     {
      char nom[50];
      char prenom[50];
      int telephonne;
      struct adresse ad;
      struct date da;
      };
    struct fiche tab[50];
    void remplir_tab(struct fiche *tab,int n)// n est la taille du tableau
    {
    int i;
    for(i=0;i<n;i++)
    {printf("donner le nom et le prenom");
    for(i=0;i<50;i++)
      {
     scanf("%s%s",&tab[i].nom,&tab[i].prenom);
      }
      printf("donner num et codepostal");
      scanf("%d%d",&tab[i].ad.num,&tab[i].ad.codepostal);
      printf("donner rue et ville");
      for(i=0;i<50;i++)
      {
       scanf("%s%s",&tab[i].ad.rue,&tab[i].ad.ville);
       }
     
    }
    }
    void rech_nom(struct fiche *tab,char *nom,int n);
    {int i,trouve=0;
    for(i=0;(i<n)&&(trouve==0);i++)
    {
    if(strcmp(tab[i].nom,nom)==0)
    trouve=1;
    }
    }
    void rech_codp(struct fiche *tab,int codp,int n);
    {int i,trouve=0;
    for(i=0;(i<n)&&(trouve==0);i++)
    {
    if(tab[i].ad.codepostal==codp)
    trouve=1;
    }
    }

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    remplir_tab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i=0;i<n;i++)
    {printf("donner le nom et le prenom");
    for(i=0;i<50;i++)
      {
     scanf("%s%s",&tab[i].nom,&tab[i].prenom);
      }
    La boucle for(i=0;i<50;i++) est fausse :
    - elle modifie le i de la boucle précédente
    - elle est inutile le format %s lit une chaine complète.
    - il n'y a pas de & dans les arguments du scanf : ce sont des tableaux, donc déjà des adresses
    - soignez l'indentation, c'est PRIMORDIAL!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void remplir_tab(struct fiche *tab,int n)// n est la taille du tableau
    {
      int i;
      for(i=0;i<n;i++)
      {
         printf("donner le nom et le prenom");
         scanf("%s%s",tab[i].nom,tab[i].prenom); 
         printf("donner num et codepostal");
         scanf("%d%d",&tab[i].ad.num,&tab[i].ad.codepostal);
         printf("donner rue et ville");
         scanf("%s%s",tab[i].ad.rue,tab[i].ad.ville);  
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void rech_nom(struct fiche *tab,char *nom,int n) ;
    {....
    void rech_codp(struct fiche *tab,int codp,int n);
    {....
    Il ne doit pas y avoir de ;

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    je veux juste savoir comment utiliser strcmp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void rech_nom(struct fiche *tab,char *nom,int n);
    {int i;
    for(i=0;i<n;i++)
    {
    if(strcmp(tab[i].nom,nom)==0)
    printf("les deux nom sont egaux");
    else 
    printf("sont different");
    }
    }

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    apres supprission de ; apres void....

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2010, 17h15
  2. Réponses: 0
    Dernier message: 24/02/2009, 22h25
  3. Une ou plusieurs personne par fiche
    Par auroreM dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 15/12/2006, 16h45
  4. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31
  5. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 21h19

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