Pointeurs sur une structure dans une autre

Fermé
MademoiselleT Messages postés 10 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 8 février 2016 - 7 févr. 2016 à 20:42
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 févr. 2016 à 13:31
Salut,

J'ai essayer d'écrire des structures dans une structure. Mais, en utilisant un pointeur sur un éléments d'une des structures imbriquées, mon programme a buggé puis "cessé de fonctionner".
Je voudrais savoir si le fait d'imbriquer des structures dans ma structure est faisable. Si oui, comment utiliser les attributs de l'entité de type de ma structure ?

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
7 févr. 2016 à 22:09
Bonjour,

Oui c'est faisable.
Montre-nous ton code plutôt, ça sera plus simple pour t'aider.
Note : pour poster ton code, merci d'utiliser la balise <code c>.
Par exemple :
<code c>ici tu mets ton code</code>
0
MademoiselleT Messages postés 10 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 8 février 2016
Modifié par MademoiselleT le 7/02/2016 à 22:34

struct personne 
{ 
char noms[20]; 
struct voies 
{ 
nomregion regcon[16]; 
struct voi 
{ 
int nbvreg; 
}; 
}; 
}; 
typedef struct personne personne; 
typedef struct voies voies; 
typedef struct voi voipreg; 

main() 
{ 
personne cndt[5]={"","",0}; 
personne *pointeur0=NULL; 
voies *pointeur1=NULL; 
voipreg *pointeur2=NULL; 
int i; 

printf("\t\tNOMS DES CANDIDATS\n\t\t__________________\n\n"); 
for(i=0; i<5; i++) 
{ 
printf("Candidat numero %d:\t",i+1); 
scanf("%s",cndt[i].noms); 
} 
nom(pointeur1->regcon); 
printf("\n\t\tNOMBRE DE VOIES PAR CANDIDAT\n\t\t_________(etc etc) 


nom -->> procédure qui copie des chaines de caracteres dans un tableau de chaines de caracteres
c'est à partir de l'avant derniere ligne que sa déconne
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 7/02/2016 à 22:40
Bonjour,

Tu as oublié de mettre la fin de la balise </code>.
Du coup, ça manque de visiblité.

Dans tes structures, tous les éléments doivent être déclarés.
Pourtant, tu définies des structures imbriquées, sans déclarer de variables.

Exemple :
struct Personne {
     struct Nom {
          char nom[15];
     } sNom; /*tu crées une variable nom de type struct Nom. Sans ça, ça ne fonctionnera pas*/
};

Note : par ailleurs, ta structure Nom a une portée restreinte à ta structure Personne. Cela ne sert donc à rien de la nommer. Tu peux mettre simplement :
struct { /*pas besoin de nommer la structure*/
     char nom[15];
} sNom;


Je te laisse corriger ton code en fonction de mes remarques. N'hésite pas à reposter ton code si cela ne fonctionne toujours pas.

Google is your friend
0
MademoiselleT Messages postés 10 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 8 février 2016
7 févr. 2016 à 22:55
ahh je vois. l'erreur si signalais juste la déclaration que je n'avais pas faite. merci beaucoup
mais sa ne marche toujours pas quand même..bug à la meme ligne
0
MademoiselleT Messages postés 10 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 8 février 2016
7 févr. 2016 à 23:07
J'ajoute aussi que je ne peux plus pointer un pointeur sur un élément d'une des structures auxquelles j'ai retiré le nom
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
7 févr. 2016 à 23:19
Poste ton code corrigé que je vois où tu en es :-).
0
MademoiselleT Messages postés 10 Date d'inscription mercredi 22 octobre 2014 Statut Membre Dernière intervention 8 février 2016
7 févr. 2016 à 23:20
struct personne
{
    char noms[20];
    struct
    {
        nomregion regcon[16];
        struct
        {
            int nbvreg;
        } svoi;
    } svoies;
};
typedef struct personne personne;

main()
{
    personne cndt[5]={"","",0};
    struct svoies *pointeur1=NULL;
    int i;

    printf("\t\tNOMS DES CANDIDATS\n\t\t__________________\n\n");
    for(i=0; i<5; i++)
    {
        printf("Candidat numero %d:\t",i+1);
        scanf("%s",cndt[i].noms);
    }
    nom(pointeur1->regcon);
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
7 févr. 2016 à 23:24
struct svoies *pointeur1=NULL;
La structure sVoies n'est pas connue à cet endroit. Sa portée est cantonnée à la structure Personne.

Si tu souhaites pouvoir utiliser cette structure à l'extérieure, il faut que tu la déclares à au même niveau que la structure Personne.
0