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 :

Champ d'un tableau qui pointe vers une 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 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut Champ d'un tableau qui pointe vers une structure
    Bonjour,

    J'ai une structure personne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct personne
    {
        char nom[31];//nom de la personne (30 caractère max)
        char prenom[31];//prénom de la personne (30 caractère max)
        char nationalite[41];//nationalité de la personne (40 caractère max)
    };
    et une structure film :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct film
    {
        char titre[51];//titre du film (50 caractère max)
        struct personne realisateur;//réalisateur du film
        struct personne *liste;//tableau dynamique de personnes (acteurs)
        int nbr;//nombre d'acteur dans le film
        int an;//année de réalisation du film
    };
    J'ai un peu de mal à comprendre la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct personne *liste;//tableau dynamique de personnes (acteurs)
    Comment lier plusieurs structure de type personnes ?

    J'ai essayer avec un tableau sur lequel chaque case pointe vers une structure, mais aparemment ce n'est pas la bonne 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
    struct film encode_nouv_film (void)//fonction qui permet d'encoder les informations d'un film
    {
        int i;
        char titre[51];
        int an;
        int nbr;
        int tab[10];
        struct personne pers;
        struct film nouv;
        printf("Entrez le titre du film.\n");
        fflush(stdin);
        gets(titre);
        strcpy(nouv.titre,titre);
        printf("Entrez l'ann%ce de r%calisation du film.\n",130,130);
        fflush(stdin);
        scanf("%d",&an);
        nouv.an = an;
        pers = encod_nouv_pers ();
        nouv.realisateur = pers;
        printf("Entrez le nombre d'acteur %c encoder.\n",133);
        fflush(stdin);
        scanf("%d",&nbr);
        nouv.nbr = nbr;
        for(i=0;i<nbr;i++)
        {
            tab[i] = encod_nouv_pers ();
        }
        return nouv;
    }

  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
    Il s'agit de construire un tableau de N struct personne dont l'adresse du premier élément est mise dans le champ liste. Comme on ne sait pas a priori le nombre de structures, on utilisera l'allocation dynamique.

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct film unFilm;
    ....
    // lire le nombre d'acteurs 
    unFilm.nbr = ... // le nombre d'acteurs
    // créer le tableau 
    unFilm.liste = malloc(unFilm.nbr* sizeof(struct personne));
    if( unFilm.liste != NULL) // le tableau est créé
    {
       // remplir pour chaque acteur unFilm.liste[i] , i=0..unFilm.nbr-1
       // les informations des acteurs

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Merci, en effet ça semble logique

    Un truc comme ça donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    printf("Entrez le nombre d'acteur %c encoder.\n",133);
        fflush(stdin);
        scanf("%d",&nbr);
        nouv.nbr = nbr;
        if ((nouv.liste = malloc(nouv.nbr* sizeof(struct personne))) == NULL) 
        {
            fprintf(stderr,"Allocation Impossible");
            exit(EXIT_FAILURE);
        }
        for(i=0;i<nbr;i++)
        {
            nouv.liste[i] = encod_nouv_pers ();
        }

  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
    Oui, sur cette trame de code.

    fflush() ne doit pas s'appliquer à un flux d'entrée comme stdin.
    Il y a plusieurs entrées dans la FAQ qui explique cela.
    Voir FAQ :
    A quoi sert la fonction fflush ?
    Pourquoi ne faut-il pas utiliser fflush(stdin) pour vider le buffer clavier ?
    Comment vider le buffer clavier ?
    Vider systématiquement le buffer clavier avant une lecture est une mauvaise idée : on ne sait pas dans quel état il se trouve. Il est préférable de vider le buffer clavier après une lecture (là on sait si il y a quelque chose à vider ou non) de façon à le laisser "propre" pour l'entrée suivante.

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

Discussions similaires

  1. Droits pour exécuter une vue qui pointe vers une autre base ?
    Par fredg9 dans le forum Administration
    Réponses: 3
    Dernier message: 08/11/2012, 13h21
  2. Réponses: 3
    Dernier message: 02/03/2010, 08h16
  3. Bouton qui pointe vers une valeur ciblée
    Par d_cer76 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/07/2008, 06h16
  4. bouton qui pointe vers une page jsp
    Par redabadache3 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/10/2007, 14h33

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