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 :

problème d'initialisation d'un tableau de structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2003
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 128
    Par défaut problème d'initialisation d'un tableau de structure
    Bonjour,
    j'ai un tableau de 3 personnes, chaque personne caractérisée par son cin (int), son prenom et son nom. j'ai implémenté le prog ci-dessous permettant d'initialiser les personnes à partir du clavier afin de les affichées. mais ce prog ne peut pas initialiser le nom de chaque personne.
    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
     
     
    #include <stdio.h>
     
     
     
    struct personne{
    		int cin;
    	char pre[21];
    	char nom[21];
     
    };
     
     
    void init(personne tab[3]){
     
    int i;
     
    for(i=0;i<3;i++){
    printf("la personne num= %d\n",i+1);
    printf("donner cin=");
    scanf("%d",&tab[i].cin);printf("\n");
     
    printf("donner nom=");
    gets(tab[i].pre);printf("\n");
     
    printf("donner prenom=");
    gets(tab[i].nom);printf("\n");
     
     
     
     }//fin for
     
    }//fin init
     
     
    void affiche(personne tab[3])
    {
    int i;
     
    printf("-----------------------------------------\n");
    for(i=0;i<3;i++){
    printf("%d\n",tab[i].cin);
    puts(tab[i].pre);printf("\n");
    puts(tab[i].nom);printf("\n");
    }
     
    }//fin affiche
     
     
    void main(){
     personne tab[3];
     
    init(tab);
    affiche(tab);
     
    }
    merci

  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
    - De façon générale, il faut être cohérent : pourquoi afficher "donner nom=" pour lire le prénom et "donner prenom=" pour lire le nom ?

    - gets() lit une ligne complète (y compris tous le blancs) jusqu'au '\n' inclus (qu'elle ne met pas dans le buffer de destination). On préfère d'ailleurs utiliser fgets() qui est plus sûre (mais qui met le '\n' dans le buffer de destination).
    Voir la : Pourquoi gets est-elle dépréciée en faveur de fgets ?
    Je ne pense pas d'ailleurs que ce soit les fonctions les plus appropriées pour faire ce que tu veux.

    - Le problème :
    Après la lecture de cin, il reste dans le buffer du clavier ce qui a été tapé après le nombre. Il reste donc au moins le '\n'. Le gets() qui suit prend ce '\n', en déduit que la ligne est vide et place 0 dans le buffer pre et le message "donner prenom=" s'affiche aussitôt. Alors seulement, on peut correctement entrer le nom.

    Donc, il faut vider le buffer clavier après la lecture du nombre,
    soit par la méthode de la : Comment vider le buffer clavier ?
    soit en utilisant le scanf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%d%[^\n]%*c",&tab[i].cin);
    - Pour terminer, le code ne connait pas personne mais struct personne.

Discussions similaires

  1. Initialisation d'un tableau de structures dynamique
    Par mokochan dans le forum Débuter
    Réponses: 4
    Dernier message: 09/09/2013, 18h10
  2. Réponses: 4
    Dernier message: 06/05/2011, 13h38
  3. Réponses: 0
    Dernier message: 15/06/2010, 10h58
  4. Problème d'initialisation d'un tableau
    Par Premium dans le forum C
    Réponses: 13
    Dernier message: 31/05/2006, 14h48
  5. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30

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