Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structures

    20 novembre 2007 à 16:51:02

    Ceci concerne le chapitre sur les structures. J'ai fait un petit programme pour l'exercice où il faut créer un tableau de personnes. Je vous montre :
    D'abord, structs.h :
    1. typedef struct Personne Personne;
    2. struct Personne
    3. {
    4.     char prenom[100];
    5.     char nom[100];
    6.     int age;
    7. };

    Et là, main.c :
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "Structs.h"
    4. int main(int argc, char *argv[])
    5. {
    6.     Personne guy[3];
    7.     int i, j;
    8.     printf("\t\t--- Saisies Fiches Personnes ---\n\n\n");
    9.     for (i=0; i<3; i++)
    10.     {
    11.         printf("\tPersonne %d :\nQuel est votre prenom ? ", i);
    12.         scanf("%s", guy[i].prenom);
    13.         printf("Votre nom ? ");
    14.         scanf("%s", guy[i].nom);
    15.         printf("Votre age ? ");
    16.         scanf("%ld", guy[i].age);
    17.         printf("\n\n");
    18.     }
    19.     printf("\n\n\n\t\t--- Affichages Fiches Personnes ---\n\n");
    20.     for (j=0; j<3; j++)
    21.     {
    22.         printf("\n\tPersonne %d :\nPrenom : \t%s\nNom : \t%s\nAge : \t%d\nSexe : \t", j, guy[j].prenom, guy[j].nom, guy[j].age);
    23.     }
    24.   system("PAUSE");     
    25.   return 0;
    26. }


    J'ai pas de probleme à la compilation. Mais à l'execution, lorsque je rentre l'age de guy[1], le programme plante et je comprend pas pourquoi.
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2007 à 16:56:52

      1. scanf("%s", guy[i].prenom);


      La même erreur sur tous tes "scanf":

      Il faut envoyer l'adresse de ta variable, pas ta variable!


      Correction :

      1. scanf("%s", &guy[i].prenom);


      Edit: Sauf si je me trompe ^^
      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2007 à 1:23:55

        Merci ca marche. C'est une erreure que je fais souvent ...
        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2007 à 1:45:16

          Citation : Sh@dowlink


          Edit: Sauf si je me trompe ^^


          Et c'est le cas.
          1. scanf("%s", guy[i].prenom);

          prenom est une chaîne de caractère, soit un tableau de char, soit un pointeur. Or, la valeur d'un pointeur, c'est justement une adresse.
          Il ne faut ajouter le & que pour la variable age, qui n'est pas un pointeur.
          Sinon, %s est la pire utilisation possible de scanf, qui n'est déjà pas sécurisé.
          À la limite :
          1. scanf("%99s", guy[i].prenom);

          Le 99 permet de ne prendre que les 99 premiers caractères, pour éviter un débordement.

          Ou, encore mieux, la fonction fgets.


          Bonne continuation.
          • Partager sur Facebook
          • Partager sur Twitter

          Structures

          × 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