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'affichage suite a une structure


Sujet :

C

  1. #1
    Membre régulier Avatar de clampin
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 96
    Points : 105
    Points
    105
    Par défaut problème d'affichage suite a une structure
    Bonjour,

    J'ai un petit problème d'affichage suite à l'utilisation d'une structure.

    Je voudrai créer un petit répertoire. Donc pour l'instant on ne fait l'affichage que pour 4 personnes.

    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
     
    #include <stdio.h>
     
    /* définition d'une structure */
     
    struct entry {
    	char fnom[20];
    	char pnom[20];
    	char phone[10];
    };
     
    /* Déclaration d'un tableau de structure */
     
    struct entry list[4];
     
    int i;
     
    int main()
    {
    	puts("Vous allez introduire 4 personnes\n");
     
    	/* boucle d'enregistrement de 4 personnes */
     
    	for (i=0; i<4; i++)
    	{
    		printf("Entrez le nom : ");
    		scanf("%s", list[i].fnom);
    		printf("Entrez le prénom : ");
    		scanf("%s", list[i].pnom);
    		printf("Entrez le numéro de téléphone (xxxxxxxxxx) : ");
    		scanf("%s", list[i].phone);
    	}
     
    	printf("\n");
     
    	/*affichage des données */
     
    	for (i=0; i<4; i++)
    	{
    		printf("Nom : %s %s", list[i].fnom, list[i].pnom);
    		printf("\t\tphone : %s", list[i].phone);
    		printf("\n");
    	}
     
    	return 0;
    }
    et voici ce qui s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Nom : Remacle David             phone : 1234567890Conrad
    Nom : Conrad Philipe            phone : 0123456789Dupond
    Nom : Dupond Arthur             phone : 0123456789Pourbaix
    Nom : Pourbaix Marie            phone : 0123456789
    J'avoue ne pas trop savoir pourquoi....

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Il ne te manquerais pas un caractère pour stocker le \0 ?

  3. #3
    Membre régulier Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 98
    Points
    98
    Par défaut
    c'est l'usage de scanf() qui cause cette anormalité, pense a vider le buffer après chaque scanf(), en tout cas scanf() n'est pas recommandé pensez a utiliser fgets(), puis fclean()

  4. #4
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    La réponse est donnée par fremen167 : Le champ phone est trop petit. Il doit faire au moins 11 caractères. Le '\0' de phone est écrasé par le champ fnom de la structure suivante (si il y en a une) du tableau list.

  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 siegfried64 Voir le message
    c'est l'usage de scanf() qui cause cette anormalité, pense a vider le buffer après chaque scanf(), en tout cas scanf() n'est pas recommandé pensez a utiliser fgets(), puis fclean()
    Attention. Il faut préciser que fclean() n'est pas une fonction standard, mais une fonction 'communautaire' dont on trouvera le code en cherchant dans le forum.

Discussions similaires

  1. [MySQL] Insertion de ligne non voulue et problème d'affichage suite à la valeur d'une checkbox.
    Par Valadone dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 28/05/2015, 01h00
  2. Problème sur un pointeur dans une structure
    Par steph_1 dans le forum Langage
    Réponses: 5
    Dernier message: 05/09/2007, 18h59
  3. affichage amélioré d'une structure de fichier
    Par maahou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/04/2007, 09h24
  4. Réponses: 7
    Dernier message: 21/12/2005, 16h44
  5. Problème d'affichage dynamique d'une liste
    Par bor1s dans le forum ASP
    Réponses: 2
    Dernier message: 18/11/2005, 16h18

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