Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structure

    16 juin 2006 à 2:29:56

    Salut, dans le tuto à mateo, j'essaie de faire l'exercises où l'on doit entré deux personne et les affiché à la fin.. j'ai pondu ce code et ca ne marche pas.. qu'elle est mon erreur :(!

    main.c
    #include <stdio.h>
    #include <stdlib.h>
    #include "structure.h"

    int main()
    {
        long i, nombreDePersonne = 2;
        Personne individu[2];

        printf("-- Premier Personne --\n");
        printf("Nom de la personne: ");
        scanf("%s", individu[0].nom);

        printf("Prenom de la personne: ");
        scanf("%s", individu[0].prenom);

        printf("Adresse de la personne: ");
        scanf("%s", individu[0].adresse);

        printf("Age de la personne: \n");
        scanf("%s", individu[0].age);

        printf("-- Deuxieme Personne --\n");
        printf("Nom de la personne: ");
        scanf("%s", individu[1].nom);

        printf("Prenom de la personne: ");
        scanf("%s", individu[1].prenom);

        printf("Adresse de la personne: ");
        scanf("%s", individu[1].adresse);

        printf("Age de la personne: ");
        scanf("%s", individu[1].age);

        for(i = 0; i < nombreDePersonne; i++)
        {
            printf("%s %s à %ldans et habite au %s", individu[0].prenom, individu[0].nom, individu[0].age, individu[0].adresse);
        }

        system("PAUSE");
            return 0;
    }


    structure.h
    typedef struct Personne Personne;
    struct Personne
    {
        char nom[100];
        char prenom[100];
        char adresse[1000];
        long age;
    };


    Merci de m'aider^^
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2006 à 5:05:01

      Tu devrais être plus précis. Qu'est-ce qui ne fonctionne pas? Le compilateur donne-t-il des erreurs et/ou des warnings? Le code ne fonctionne pas en entier, à plusieurs endroits ou à un seul?
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2006 à 6:16:22

        Là, en tout cas, les scanf() vont poser problemes à l'exécution.
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2006 à 8:41:45

          Prenons dans l'ordre :
          le nom et le prénom : tant qu'il n'ya pas de - ni d'espace ça pourrait fonctionner.
          l'adresse : par définition une adresse contient plusieurs mots donc scanf() ne suffit plus.
          l'âge : scanf() pourrait fonctionner à condition d'être "bien" utilisé : tu mets une chaîne de caractère dans un long : vérifie bien après le copier/coller.
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2006 à 11:40:18

            C'est pas plutôt :
            #include <stdio.h>
            #include <stdlib.h>
            #include "structure.h"

            int main()
            {
                long i, nombreDePersonne = 2;
                char Personne individu[2];
            • Partager sur Facebook
            • Partager sur Twitter
              16 juin 2006 à 14:53:57

              o_O j'ai pas compris ton message TheDownloader
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2006 à 14:56:37

                Citation : Tab

                o_O j'ai pas compris ton message TheDownloader


                Moi non plus !

                C'est quoi ce char ? Le type est déjà défini, et c'est Personne.
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  16 juin 2006 à 15:11:18

                  Citation : Tetram

                  Sans en être certain :euh: , il ne faut pas déclarer le typedef après la déclarer du type struct Personne???



                  Non cette façon de procéder fonctionne tout comme :



                  typedef struct
                  {
                      char nom[100];
                      char prenom[100];
                      char adresse[1000];
                      long age;
                  }Personne;



                  [Edit] c'est malin d'éditer pendant que je réponds :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 juin 2006 à 17:42:34

                    Désolé j'avais pas vu ton fichier structure.h :honte::honte:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juin 2006 à 17:46:25

                      Et là c'est pas logique :
                      for(i = 0; i < nombreDePersonne; i++)
                          {
                              printf("%s %s à %ldans et habite au %s", individu[0].prenom, individu[0].nom, individu[0].age, individu[0].adresse);
                          }


                      Ce serait plutôt :
                      for(i = 0; i < nombreDePersonne; i++)
                          {
                              printf("%s %s à %ldans et habite au %s", individu[i].prenom, individu[i].nom, individu[i].age, individu[i].adresse);
                          }


                      Non ? ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 juin 2006 à 18:28:25

                        c'est là la remarque que j'ai faite : il initialise age en long et s'en sert en string.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juin 2006 à 20:08:15

                          Citation : Tab

                          c'est là la remarque que j'ai faite : il initialise age en long et s'en sert en string.


                          Rien à voir. La remarque de Pierre89 porte sur l'indice du tableau de structure... C'esr sûr que si on met 0, c'est pas la peine de faire une boucle... De plus, le formatteur pour l'age est bien "%ld", donc je ne vois pas de quoi tu parles...


                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            16 juin 2006 à 22:32:01

                            -ed- il parle de ça je crois :
                                printf("Age de la personne: \n");
                                scanf("%s", individu[0].age);


                            Bouh ça fait mal aux yeux !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 juin 2006 à 22:41:24

                              Woah, mon code est vraiment plein d'erreurs à se que je vois :( Je vais le réécrire en m'appliquant :(!

                              Edit: Bon, j'ai faite ca.. sa ne marche toujours pas lors de l'executation.. lorsque je demarre le programme, tous fonctionne, je rentre le nom, le prenom, ladresse à merveille et ensuite apres ladresse je fait Entrer et la BOUM! Message d'erreur :O! Le programme dois fermer..

                              main.c
                              #include <stdio.h>
                              #include <stdlib.h>
                              #include "structure.h"

                              int main()
                              {
                                  long i, nombreDePersonne = 2;
                                  Personne individu[2];

                                  for(i = 0; i < nombreDePersonne; i++);
                                  {
                                      printf("Nom de la personne: ");
                                      scanf("%s", individu[i].nom);

                                      printf("Prenom de la personne: ");
                                      scanf("%s", individu[i].prenom);

                                      printf("Adresse de la personne: ");
                                      scanf("%s", individu[i].adresse);
                                  }


                                  for(i = 0; i < nombreDePersonne; i++)
                                  {
                                      printf("%s %s habite au %s", individu[i].prenom, individu[i].nom, individu[i].adresse);
                                  }

                                  system("PAUSE");
                                      return 0;
                              }


                              structure.h
                              typedef struct
                              {
                                  char nom[100];
                                  char prenom[100];
                                  char adresse[1000];
                                  long age;
                              }Personne;


                              Merci de m'aider dans mes erreurs..
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 juin 2006 à 23:57:22

                                for(i = 0; i < nombreDePersonne; i++);

                                Enlève ce point-virgule. Sinon, tu écris dans individu[2]...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juin 2006 à 10:39:02

                                  De plus scanf() ne récuperera pas toute ton adresse : elle est en plusieurs mot.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 juin 2006 à 13:38:03

                                    Alors quesce que faut je mettre ???
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 juin 2006 à 13:45:21

                                      Soit tu connais le nombre exact de mot et tu mets plusieurs chaine mais c'est fastidieux !

                                      Donc utilise fgets de cette façon :
                                      printf("entre ton adresse : ");
                                      fgets(individu[0].adresse, sizeof(individu[0].adresse), stdin);

                                      Attention il va te prendre le '\n' par contre de quand tu tapes sur entrée !
                                      void enleverEntrer(char *chaine)
                                      {
                                        char *p = NULL;

                                        p = strchr(chaine, '\n');
                                        if (p != NULL)
                                             *p = 0;
                                      }

                                      Voilà une fonction qui enlève le '\n' !
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 juin 2006 à 13:57:55

                                        Citation : Pierre89

                                        Soit tu connais le nombre exact de mot et tu mets plusieurs chaine mais c'est fastidieux !

                                        Donc utilise fgets de cette façon :

                                        printf("entre ton adresse : ");
                                        fgets(individu[0].adresse, sizeof(individu[0].adresse), stdin);


                                        Attention il va te prendre le '\n' par contre de quand tu tapes sur entrée !

                                        void enleverEntrer(char *chaine)
                                        {
                                          char *p = NULL;

                                          p = strchr(chaine, '\n');
                                          if (p != NULL)
                                               *p = 0;
                                        }


                                        Voilà une fonction qui enlève le '\n' !


                                        Mais elle laisse trainer des caractères en cas de dépassement...

                                        static void purge (FILE * fp)
                                        {
                                           int c;
                                           while ((c = fgetc (fp)) != '\n' && c != EOF)
                                           {
                                           }
                                        }

                                        static void clean (char *s, FILE * fp)
                                        {
                                           /* search ... */
                                           char *p = strchr (s, '\n')/* <string.h> */
                                           if (p != NULL)
                                           {
                                              /* ... and kill */
                                              *p = 0;
                                           }
                                           else
                                           {
                                              purge (fp);
                                           }
                                        }

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Music only !
                                          17 juin 2006 à 14:32:08

                                          J'ai jamais compris à quoi servait :
                                          static void purge (FILE * fp)
                                          {
                                             int c;
                                             while ((c = fgetc (fp)) != '\n' && c != EOF)
                                             {
                                             }
                                          }


                                          En cas de dépassement c'est à dire ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 juin 2006 à 14:48:41

                                            Bas si tu fait un fgets( xxx, 15, yyy ); et que l'utilisateur rentre 20 caractères, 6 d'entre eux vont rester dans le buffer. Seulement les 14 premiers seront supprimés du buffer et placés dans xxx. ;)

                                            A la prochiane fonction qui va annalyser stdin, ce seront ces 6 caractère qui apparaitrons.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 juin 2006 à 14:57:22

                                              Bon alors voila comment il faut EXACTEMENT faire :
                                              il faudra bien entendu remplacer par tes propres type de variable !
                                              ---dans ton fichier .c :

                                              #include <stdio.h>
                                              #include <stdlib.h>
                                              #include "tonfichier.h"

                                              int main(int argc, char *argv[])
                                              {
                                              Personne ca;
                                              printf ("Quelle est votre nom ?");
                                              scanf ("%s",ca.nom);
                                              printf ("Et votre Prenom ?");
                                              scanf ("%s",ca.prenom);

                                              printf ("Ah vous vous appellez donc %s %s\n",ca.nom,ca.prenom);

                                              return 0;
                                              }


                                              -----Et dans le fichier .h :

                                              typedef struct Personne Personne;
                                              struct Personne
                                              {
                                              char nom[100];
                                              char prenom[100];

                                              };


                                              ET LA CA MARCHE !!!!
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 juin 2006 à 15:04:21

                                                Citation : ulried

                                                Bon alors voila comment il faut EXACTEMENT faire :
                                                #include <stdio.h>


                                                Mettre des balises code, par exemple...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Music only !
                                                  17 juin 2006 à 16:25:49

                                                  ulried t'es pas un peu à la masse ?
                                                  Ca il a pigé depuis longtemps je pense !
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    17 juin 2006 à 17:35:02

                                                    Quand j'ai envoyé mon message, il n'y avais pas autant de réponse !
                                                    Chais pas ce qui c'est passé...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Structure

                                                    × 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