Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structure langage C

Exercice carnet d'adresse

    22 mars 2014 à 21:00:41

    Bonsoir,

    Je suis actuellement entrain de faire l'exercice sur les structures. Le but est de créer une structure qui peut contenir le nom,prenom et age d'une personne. Si on veut connaitre les informations de plusieurs personnes, on peut faire une boucle. La est le but de l'exercice. J'ai fait ma boucle mais au 2ème tour de boucle, elle plante après avoir demandé le prenom de l'individu. Pourriez vous m'expliquer les raisons de ce problème ? Merci d'avance !

    Voici mon programme(j'ai fait une compilation séparée avec Code::Blocks)

    Fichier .h:

    Fichier.c:

     J'ai mis les lignes printf("OK\n") pour voir à quel moment mon programme plantait et c'est au 2 ème tour de boucle juste après avoir entré une chaine de caractère pour le prenom

    Une autre chose que je ne comprend pas et que lorsque j'initialise ma variable age à 0 dans ma structure, lorsque je fais plus tard appelle à individu.age, le debugger me dit que ma structure Personne ne contient pas de "member" age

    Merci d'avance pour toutes vos réponses ! 
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 mars 2014 à 1:10:13

      Regarde comment tu fais ton appel de scanf pour l'age et maintenant regarde celui que tu fais pour le prénom et le nom tu vois rien qui change ?

      Aussi Personne individu[1] va créer un tableau d'une seul case. Il faut faire Personne indiviu[2]

      • Partager sur Facebook
      • Partager sur Twitter
        23 mars 2014 à 1:20:55

        Je ne m'y connais pas trop, j'ai lu très vite fait ton code et au final je pose plus une question qu'autre chose ^^

        Quand tu écris Personne individu[1], tu appelles ta structure sous le nom individu[...] qui se comporte comme un tableau nan ?

        Or un tableau commence bien à la valeur 0 et se finit à la valeur : (VALEUR OU ON LA DECLARE) - 1 ; donc SI une telle structure se comporte comment un tableau, il est normal que si tu déclares individu[1], le programme plante quand tu essaies de modifier une valeur de individu[1] alors que individu[0] marche. Il faudrait donc déclarer individu[2] au minimum voir prendre individu[100] et bloquer le programmer quand i == 100 pour éviter de le planter.

        Je demande confirmation de ce que j'ai écrit car je suis loin d'être une flèche en C ^^. En ce qui concerne ton initialisation du "age", je ne sais pas désolé.

        Bonne nuit, Basoli ;)

        PS : ton * i = 0 * ne sert à rien car dans ta boucle For tu écris déjà * i=0* . Par contre il est quand même primordiale de garder *int i* pour déclarer la variable i !!

        • Partager sur Facebook
        • Partager sur Twitter
          23 mars 2014 à 11:07:55

          soueuls:

          je remarque que pour age je met le signe '&' dans le scanf et que pour nom et prenom je ne le met pas. Mais c'est normal non ? puisque age est un nombre et prenom et nom sont des chaînes de caractères.

          soueuls et Basoli:

          En effet j'ai fais une erreur au niveau de la déclaration de mon tableau il faut écrire individu[2]. J'avais oublié que le numéro que l'on indiquait entre les [] était le nombre de case et non la dernière case du tableau !

          Basoli:

          je sais qu'initialiser là n'est pas obligatoire mais il paraît que c'est mieux. Alors je le fais même si je n'ai pas trop idée des problèmes qu'une non initialisation pourrait poser^^

          Merci beaucoup pour vos réponses !

          • Partager sur Facebook
          • Partager sur Twitter
            23 mars 2014 à 11:20:32

            Salut alors oui tu as tout a fait raison pour le & !

            Ensuite ta principale erreur tu la vu c'est ton tableau trop petit !

            Et en lisant un commentaire de ton code , on ne peut tout Simplement pas initialiser une variable d'une structure :)  c'est une règle après je ne connais pas l'explication mais tu trouveras ton bonheur sur internet !

            • Partager sur Facebook
            • Partager sur Twitter
              23 mars 2014 à 12:35:36

              Newclem:

              Merci pour tes réponses !  J'esserai de trouver des informations sur cela ! 
              • Partager sur Facebook
              • Partager sur Twitter
                23 mars 2014 à 14:21:18

                Enfin quand je dis initialiser c'est initialiser la variable dans la structure meme ! après tu peux l'initialiser a 0 (par exemple) en l'appelant mais pas dans la structure même ;)
                • Partager sur Facebook
                • Partager sur Twitter

                Structure langage C

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown