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 :

Tableau de structures & structure imbriqué


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Sans emploi
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Sans emploi
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Par défaut Tableau de structures & structure imbriqué
    Bonjour, je dois réaliser un tableau de structure imbriquant une structure, avec comme exemple nom, prenom, age dans la structure "principale", et poids taille dans la structure imbriquée.
    Je suis donc arrivé au code suivant qui, vu l'existence de ce topic, ne fonctionne pas.
    Pourriez vous m'éclairer pour que cet algo fonctionne s'il vous plait ?
    Merci

    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
     
    #include <stdio.h>  
    #include <stdlib.h> 
     
    typedef struct personne {
               char nom[15];
               char prenom[15];
               int age;
               struct description {
                                  int poids;
                                  int taille;
                                  };
               };
     
     
    int main()
    {
            int i;   
               struct personne.description{
                      ("toto","Jean",24,60,175);
                      ("tata","Jacques",36,80,190);
                      ("titi", "Paul",28,70,180);
                      ("tutu", "Nick",32,75,185);
                      };
     
                      while(i<=4)
                      {
                      printf(" %c %c %d %d %d", personne[i].nom, personne[i].prenom, personne[i].age, personne[i].description.poids, personne[i].description.taille);
                      }
        system("pause");
    }
    Les erreurs sont aux lignes 19 et 30.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	struct description {
    		int poids;
    		int taille;
    	};
    Ceci déclare un type, mais pas le membre lui-même.

    Mon conseil serait plutôt de faire ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct description {
    	int poids;
    	int taille;
    };
     
    struct personne {
    	char nom[15];
    	char prenom[15];
    	int age;
    	struct description desc;
    };
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Citation Envoyé par Mathios Voir le message
    Pourriez vous m'éclairer pour que cet algo fonctionne s'il vous plait ?
    Visiblement c'est un problème de syntaxe et non d'algo. De plus on a pas les numéros de ligne, tu pourrais mettre un commentaire les lignes qui te posent problème....

    En l'occurence ce que tu écris c'est tout sauf du C !

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>  
    #include <stdlib.h> 
     
    typedef struct personne {
               char nom[15];
               char prenom[15];
               int age;
               struct description {
                                  int poids;
                                  int taille;
                                  };
               };
    1) Tu fais un typedef sans définir le type, à quoi sert le typedef ?
    2) Tu déclares une structure à l'intérieur d'une autre, ça n'a aucun effet.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main()
    {
            int i;   
               struct personne.description{
                      ("toto","Jean",24,60,175);
                      ("tata","Jacques",36,80,190);
                      ("titi", "Paul",28,70,180);
                      ("tutu", "Nick",32,75,185);
                      };
    Cette syntaxe n'est pas du C : ce que tu écris n'a aucun sens !

    1)Les variables en C ne sont pas initialisée, donc i a n'importe quelle valeur à cet endroit du programme.
    2) Quand on connait la borne (4) on n'utilise en général pas un while mais un for.
    3) La borne sup n'est pas <=4 mais <4 sinon tu lis hors du tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                      printf(" %c %c %d %d %d", personne[i].nom, personne[i].prenom, personne[i].age, personne[i].description.poids, personne[i].description.taille);
                      }
    1) %c c'est pour écrire UN caractère.
    2) Tu fais une boucle mais i n'est jamais modifié ! La boucle va être infinie.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        system("pause");
    }
    system("pause") suppose que la commande pause existe, ce qui vraiment incertain. Ce n'est pas comme ça qu'on fait en C en général, de plus une pause avant la fin du programme, est-ce vraiment utile ?

    Enfin le main renvoi un int, pourtant tu n'as aucun return !


    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
     
    #include <stdio.h>  
    #include <stdlib.h> 
     
    struct description {
      int poids;
      int taille;
    };
     
    typedef struct personne {
               char nom[15];
               char prenom[15];
               int age;
    	   struct description description;
    } personne;
     
     
    int main()
    {
      int i = 0;   
      personne personne[] = {
                      {"toto","Jean",24,{60,175}},
                      {"tata","Jacques",36,{80,190}},
                      {"titi", "Paul",28,{70,180}},
                      {"tutu", "Nick",32,{75,185}},
      };
     
      while(i<4) {
        printf(" %s %s %d %d %d\n", personne[i].nom, personne[i].prenom, personne[i].age, personne[i].description.poids, personne[i].description.taille);
        i++; 
      }
      return 0;
    }

  4. #4
    Membre régulier
    Homme Profil pro
    Sans emploi
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Sans emploi
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Par défaut
    Merci de ta réponse, détaillant toutes mes erreurs ou oublis.

    Ca fait "3 ans" que je connais le c (ne pas rendre égale "connaitre" et maitriser), et personnellement dans mes programmes, je n'ai jamais mit de "return x", et ça n'empechait pas de fonctionner.

    Concernant i, j'ai effectivement oublié de l'initialiser.
    Tout comme l'incrémentation.

    Pour la déclaration de structure, j'ai esseyé de faire comme j'ai cru comprendre par rapport à ce que j'ai pu voir sur le net.

    Concernant le "system("pause")", on m'a toujours dit d'en mettre, afin de visualiser le résultat. Sinon, comment voir si ça fonctionne bien ? (que ça soit pour l'étudiant comme le professeur ) .

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Citation Envoyé par Mathios Voir le message
    Concernant le "system("pause")", on m'a toujours dit d'en mettre, afin de visualiser le résultat. Sinon, comment voir si ça fonctionne bien ? (que ça soit pour l'étudiant comme le professeur ) .
    Deux solutions: Utiliser Visual Studio (en évitant de confondre les boutons "Start Debugging" et "Start Not Debugging"), ou lancer les programmes soi-même depuis un invite de commande.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/02/2008, 18h03
  2. Tableau de pointeurs de structures
    Par jovds dans le forum C
    Réponses: 2
    Dernier message: 11/11/2007, 21h01
  3. Réponses: 4
    Dernier message: 23/03/2007, 09h40
  4. [C#] Tableau de Hachage et structure
    Par Lambrosx dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/09/2006, 10h10
  5. Réponses: 7
    Dernier message: 21/12/2005, 16h44

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