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 :

Question sur ma structure imbriquées


Sujet :

C

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Question sur ma structure imbriquées
    Bonjour tout le monde,

    J'ai un petit problème avec une structure imbriquée pourtant toute simple.

    Je crée une structure qui reprend un pointeur sur char pour y indiquer le nom d'un acteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct{
    	char* Nom;
    } TActeurs;
    ensuite, j'aimerais créer un tableau d'acteurs, je fais donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
    	long Nombre;
    	TActeurs* Tableau;
    }TTabActeurs;
    dans le main, quand j'essaie de tester ma structure imbriquée, donc la 2e, j'ai un résultat bizarre.

    Je crée une variable de type TTabActeurs comme je nomme Acteurs, quand je fais :

    Acteurs.quelque chose, il me propose que Acteurs.

    Acteurs.Acteurs
    Il devrait pourtant me proposer Nom et nombre mais il ne le fait pas.

    où est-ce que je fais l'erreur ?

    Merci d'avance pour votre aide.

    beegees

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par beegees Voir le message
    Bonjour tout le monde,

    J'ai un petit problème avec une structure imbriquée pourtant toute simple.

    Je crée une structure qui reprend un pointeur sur char pour y indiquer le nom d'un acteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct{
    	char* Nom;
    } TActeurs;
    ensuite, j'aimerais créer un tableau d'acteurs, je fais donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
    	long Nombre;
    	TActeurs* Tableau;
    }TTabActeurs;
    Tes structures ne contiennent pas de tableaux mais de simples pointeurs. Si tu veux ensuite les remplir il te faudra jouer du malloc(). Ou alors tu enlèves tes pointeurs et tu mets de vrais tableaux []
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour Sve@r,

    Tu as totalement raison, c'est donc pour cela que je ne peux pas atteindre les éléments de ma structure ?

    Ta réponse est très importante pour moi car je commence à désespérer

    beegees

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par beegees Voir le message
    Bonjour Sve@r,

    Tu as totalement raison, c'est donc pour cela que je ne peux pas atteindre les éléments de ma structure ?
    Tu peux toujours atteindre les éléments de ta structure. Ce n'est pas parce que ton éditeur intelligent ne te les propose pas que tu n'y a pas accès...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct{
    	char Nom[20];
    } TActeurs;
     
    typedef struct{
    	long Nombre;
    	TActeurs Tableau[100];
    }TTabActeurs;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci pour ta rapide réponse.

    En fait, je ne peux pas utiliser des tableaux fixes mais des pointeurs.

    Voici les structures que j'ai imbriquées mais contrairement au Prof sur un autre exercice, quand je crée une variable de type structure, je mets un point d'arrêt sur la variable et j'affiche le résultat, je ne vois qu'une partie des éléments et pas tous alors que le Prof pour un autre exercice mais dans la même optique on voit tous les éléments :

    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
    typedef struct{
    	char* Nom;
    } TActeur;//un acteur
     
    typedef struct{
    	long Nombre;
    	TActeur* Tableau;
    }TTabActeurs;//un tableau d'acteur
     
    typedef struct{
    	char* Nom;
    	TTabActeurs* Acteurs;
    }TFilm;//un film et le tableau d'acteurs
     
    typedef struct{
    	long Nombre;
    	TFilm* Tableau;
    }TTabFilms;
     
    typedef struct{
    	char* Nom;
    	TTabFilms* Tableau;
    }TabGenre;//un genre (action, aventure...)
     
    typedef struct{
    	TabGenre* Tableau;
    }TTabGenres;
     
     
    void main()
    {
     
    TTabGenres Films;
     
    }
    voir miniature MaStructure.jpg

    et voici le code d'un autre exercice du Prof, cette fois on voi les éléments de la structure au complet :

    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
    typedef struct
    {
    	char*			Nom;		// Adresse de la chaîne dynamique qui contient le nom de la lune
    	double			Rayon;		// Valeur réelle strictement positive représentant le rayon de la lune en Km
    } TLune;
     
    typedef struct
    {
    	long			Nombre;		// Nombre d'éléments du tableau
    	TLune*			Tableau;	// Adresse du tableau d'éléments, où chaque élément est de type TLune
    } TTabLunes;
     
    typedef struct
    {
    	char*			Nom;		// Adresse de la chaîne dynamique qui contient le nom de la planète
    	double			Rayon;		// Valeur réelle strictement positive représentant le rayon de la planète en Km
    	TTabLunes		Lunes;		// Structure TTabLunes stoquant le tableau des lunes orbitant autour de cette planète
    } TPlanete;
     
    typedef struct
    {
    	long			Nombre;		// Nombre d'éléments du tableau
    	TPlanete*		Tableau;	// Adresse du tableau d'éléments, où chaque élément est de type TPlanète
    } TTabPlanetes;
     
    void main()
    {
     
    	TTabPlanetes Planete;
     
    }
    Voir StructureProf.jpg

    J'espère que vous saurez m'aider sur ce coup là.

    Un grand merci d'avance.

    beegees

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par beegees Voir le message
    Merci pour ta rapide réponse.

    En fait, je ne peux pas utiliser des tableaux fixes mais des pointeurs.

    Voici les structures que j'ai imbriquées mais contrairement au Prof sur un autre exercice, quand je crée une variable de type structure, je mets un point d'arrêt sur la variable et j'affiche le résultat, je ne vois qu'une partie des éléments et pas tous alors que le Prof pour un autre exercice mais dans la même optique on voit tous les éléments :

    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
    typedef struct{
    	char* Nom;
    } TActeur;//un acteur
     
    typedef struct{
    	long Nombre;
    	TActeur* Tableau;
    }TTabActeurs;//un tableau d'acteur
     
    typedef struct{
    	char* Nom;
    	TTabActeurs* Acteurs;
    }TFilm;//un film et le tableau d'acteurs
     
    typedef struct{
    	long Nombre;
    	TFilm* Tableau;
    }TTabFilms;
     
    typedef struct{
    	char* Nom;
    	TTabFilms* Tableau;
    }TabGenre;//un genre (action, aventure...)
     
    typedef struct{
    	TabGenre* Tableau;
    }TTabGenres;
     
     
    void main()
    {
     
    TTabGenres Films;
     
    }
    voir miniature MaStructure.jpg

    et voici le code d'un autre exercice du Prof, cette fois on voi les éléments de la structure au complet :

    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
    typedef struct
    {
    	char*			Nom;		// Adresse de la chaîne dynamique qui contient le nom de la lune
    	double			Rayon;		// Valeur réelle strictement positive représentant le rayon de la lune en Km
    } TLune;
     
    typedef struct
    {
    	long			Nombre;		// Nombre d'éléments du tableau
    	TLune*			Tableau;	// Adresse du tableau d'éléments, où chaque élément est de type TLune
    } TTabLunes;
     
    typedef struct
    {
    	char*			Nom;		// Adresse de la chaîne dynamique qui contient le nom de la planète
    	double			Rayon;		// Valeur réelle strictement positive représentant le rayon de la planète en Km
    	TTabLunes		Lunes;		// Structure TTabLunes stoquant le tableau des lunes orbitant autour de cette planète
    } TPlanete;
     
    typedef struct
    {
    	long			Nombre;		// Nombre d'éléments du tableau
    	TPlanete*		Tableau;	// Adresse du tableau d'éléments, où chaque élément est de type TPlanète
    } TTabPlanetes;
     
    void main()
    {
     
    	TTabPlanetes Planete;
     
    }
    Voir StructureProf.jpg

    J'espère que vous saurez m'aider sur ce coup là.

    Un grand merci d'avance.

    beegees
    Désolé, je connais pas Visual C++. Ca peut venir d'un paramétrage différent ou autre ou même d'un bug de Micro$oft (non, ça se saurait s'il y avait des bug dans leurs produits).

    En revanche, il y a un différence conceptuelle fondamentale entre son exemple et le tien => dans son TP une lune ne peut pas appartenir à plusieurs planètes donc sa hiérarchie structurelle est correcte.
    Dans ton TP, un acteur peut jouer dans plusieurs films. Si tu veux représenter cette réalité avec tes structures tu vas vite arriver à des redondances d'infos (t'auras plusieurs fois le même acteur à différents endroits).
    Si tu fais juste ça pour t'amuser ce n'est pas grave mais si c'est pour un truc réel ça part mal.
    Si tu fais ça pour un truc réel faut commencer par penser tes structures comme pour une bdd avec tes tables et tes relations représentées par des structures qui vont bien...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Re,

    Merci pour ta réponse.

    En revanche, il y a un différence conceptuelle fondamentale entre son exemple et le tien => dans son TP une lune ne peut pas appartenir à plusieurs planètes donc sa hiérarchie structurelle est correcte.
    Dans ton TP, un acteur peut jouer dans plusieurs films. Si tu veux représenter cette réalité avec tes structures tu vas vite arriver à des redondances d'infos (t'auras plusieurs fois le même acteur à différents endroits).
    Si tu fais juste ça pour t'amuser ce n'est pas grave mais si c'est pour un truc réel ça part mal.
    Si tu fais ça pour un truc réel faut commencer par penser tes structures comme pour une bdd avec tes tables et tes relations représentées par des structures qui vont bien...
    J'ai recommencé ma structure, saurais-tu stp y jeter un coup d'oeil ?

    Merci d'avance
    beegees

    PS: je mets l'image en miniature


    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
    #ifndef FILMOGRAPHIE_H
    #define FILMOGRAPHIE_H
     
    typedef struct{
    	char* Nom;
    } TActeur;//un acteur
     
    typedef struct{
    	long Nombre;
    	TActeur* TableauActeur;
    }TTabActeurs;//un tableau d'acteur
     
    typedef struct{
    	char* Nom;
    	TTabActeurs Acteurs;
    }TFilm;//un film et le tableau d'acteurs
     
    typedef struct{
    	long Nombre;
    	TFilm TableauFilm;
    }TTabFilms;
     
    typedef struct{
    	char* Nom;
    	TTabFilms TableauFilm;
    }TabGenre;//un genre (action, aventure...)
     
    typedef struct{
    	TabGenre* TableauGenre;
    }TTabGenres;
    #endif

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par beegees Voir le message
    Re,

    Merci pour ta réponse.



    J'ai recommencé ma structure, saurais-tu stp y jeter un coup d'oeil ?

    Merci d'avance
    beegees

    PS: je mets l'image en miniature


    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
    #ifndef FILMOGRAPHIE_H
    #define FILMOGRAPHIE_H
     
    typedef struct{
    	char* Nom;
    } TActeur;//un acteur
     
    typedef struct{
    	long Nombre;
    	TActeur* TableauActeur;
    }TTabActeurs;//un tableau d'acteur
     
    typedef struct{
    	char* Nom;
    	TTabActeurs Acteurs;
    }TFilm;//un film et le tableau d'acteurs
     
    typedef struct{
    	long Nombre;
    	TFilm TableauFilm;
    }TTabFilms;
     
    typedef struct{
    	char* Nom;
    	TTabFilms TableauFilm;
    }TabGenre;//un genre (action, aventure...)
     
    typedef struct{
    	TabGenre* TableauGenre;
    }TTabGenres;
    #endif
    Ben là ça marche avec VC++. Maintenant que veux-tu que je fasse ? Que je te dises si tes structures sont en adéquation avec ma conception ? Non. Mais ma conception n'est pas forcément la tienne...

    Bon, si moi je devais gérer un ensemble de films, en considérant qu'un film n'a qu'un seul genre, voici ce que je ferais
    Structure "genre"
    - Nom du genre

    Structure "acteur"
    - Nom de l'acteur

    Structure "film"
    - Nom du film
    - Adresse genre

    Structure "jouer" (pour lier les acteurs à un film)
    - Adresse acteur
    - Adresse film

    Et si un fim peut avoir plusieurs genres (style action/comédie) je supprime l'adresse du genre de la table "films" (tiens je parle de tables comme avec une bdd) et je crée une relation "caractériser" qui contiendra
    - adresse genre
    - adresse film
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. question sur la structure SDL_SysWMinfo
    Par moustick1991 dans le forum SDL
    Réponses: 4
    Dernier message: 27/10/2007, 14h37
  2. [Bonne pratique] Question sur sa structure
    Par bucheron007 dans le forum Subversion
    Réponses: 1
    Dernier message: 15/10/2007, 20h49
  3. question sur la structure timeval
    Par salseropom dans le forum C
    Réponses: 7
    Dernier message: 27/04/2007, 17h14
  4. Petite question sur les structures
    Par progfou dans le forum C
    Réponses: 5
    Dernier message: 21/06/2006, 15h49
  5. Question sur instruction With imbriquée
    Par LadyWasky dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/10/2005, 11h26

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