Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec les structures...

Je trouve pas la/les faute(s).

    10 février 2006 à 21:26:25

    Alors le compilateur m'indique un truc dans le genre

    "syntax error before '*' token"
    "number of arguments doesn't match prototype"
    "`point' undeclared (first use in this function)"

    etc... Voilà mon code source et merci d'avance !

    #include <stdio.h>


    int main (void)
    {

                    struct coordonees
                    {
                            int x;
                            int y;
                    };

                    void initialisation ( struct coordonees*point );
                    void double_coordonees (struct coordonees*point );

                struct coordonees point;

        initialisation ( &point );
            printf("\n\tVeuillez entrez les coordonees du point P(x,y) :  ");
            scanf("%i %i", &point.x, &point.y);

            printf("\n\tLes coordonees du point P sont P(%i,%i).", point.x, point.y);

            double_coordonees ( &point );
            printf("\n\tUne fois les coordonees doublees, P(%i,%i).\n\n\t", point.x, point.y/*(&point)->y ou encore(*(&point)).y*/ );


    getchar();
    return 0;
    }


    void initialisation ( coordonees *point )
    {
        (*point).x = 0;
            point->y   = 0; //Le int y de la structure point...

    return;
    }



    void double_coordonees ( coordonees *point )
    {
            (point->x) *= 2;
            (point->y) *= 2;
    return;
    }

    • Partager sur Facebook
    • Partager sur Twitter
      10 février 2006 à 22:20:17

      Une structure se définit avant la fonction main(), juste après les include. Et les fonctions aussi soivent être écrites en dehors de main().
      • Partager sur Facebook
      • Partager sur Twitter
        10 février 2006 à 23:00:44

        Il me semble aussi que ces lignes :
        void initialisation ( struct coordonees*point );
        void double_coordonees (struct coordonees*point );
        devraient être écrites ainsi :
        void initialisation ( struct coordonees *point );
        void double_coordonees (struct coordonees *point );
        Tu les as d'ailleurs écrites ainsi lorsque tu les détailles plus bas dans le code.
        • Partager sur Facebook
        • Partager sur Twitter
          11 février 2006 à 0:06:32

          Citation : Cédric

          "syntax error before '*' token"



          Bonsoir, j'ai le même type d'erreur avec le même type de code...

          Quelqu'un aurait-il une idée de la provenance de cette erreur?

          Je ne met que l'essentiel de mon code.

          Fichier .h
          typedef struct TableauDeDonnees TableauDeDonnees;
          struct TableauDeDonnees
          {
              int nombreElements;
              double *elements, *repetitions, *frequences, *repetitionsCumulees, *frequencesCumulees;
              double somme, moyenne, variance, ecartType;
          };

          void sommeElements(TableauDeDonnees* sommeFct);

          Fichier .c (pas le main):
          void sommeElements(TableauDeDonnees* sommeFct)
          {
              sommeFct->somme = 0;
              int i;
              for(i=0; i< sommeFct->nombreElements; i++)
              {
                  sommeFct->somme += sommeFct->elements[i];
              }
          }


          En parcourant un autre topic j'ai essayé un truc et mon programme marche si je rajoutes en plus la structure dans le fichier.c de ma fonction. Que faut-il en penser?
          • Partager sur Facebook
          • Partager sur Twitter
            11 février 2006 à 0:45:09

            Bonjour Cédric,
            En ce qui concerne "`point' undeclared (first use in this function)" c'est tout simplement due que tu utilise tes variables avant de les déclarer :

            void initialisation(struct coordonees *point);
            void double_coordonees(struct coordonees *point);

            struct coordonees point;

            qui devrait etre:

            struct coordonees point;

            void initialisation(struct coordonees *point);
            void double_coordonees(struct coordonees *point);


            EDIT:
            Il y a aussi une autre erreur, pour envoyer un pointeur a une fonction on utilise le "&" , toi tu a mis le "*":
                           
            void initialisation ( struct coordonees*point );
            void double_coordonees (struct coordonees*point );

            qui devrait etre:
                           
            void initialisation (&point);
            void double_coordonees (&point);

            • Partager sur Facebook
            • Partager sur Twitter
              11 février 2006 à 1:13:35

              Seb 087, pour le problème à la compilation, c'est le même problème que celui que j'avais (ici)

              dans ton autre fichier .c, tu dois à nouveau déclarer ta structure, sinon le compilateur ne comprend pas quel type de pointeur tu es en train de lui faire gober.

              On m'a conseillé de faire ma structure dans le .h et d'ajouter ce .h aussi bien dans main.c que dans mon autre.c
              • Partager sur Facebook
              • Partager sur Twitter
                11 février 2006 à 10:44:12

                Idem pour moi sauf que n'envoie pas un pointeur à la fonction mais un tableau.

                Le code :

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

                void mise_a_zero(Personnes joueurs[])
                   
                struct Personnes {
                        char sexe[100];
                        char nom[100];
                        char prenom[100];
                       
                        int age; };

                int main(int argc, char *argv[])
                { 
                    int i = 0;
                   
                    typedef struct Personnes Personnes;
                       
                    Personnes joueurs[3];
                   
                    for (i = 0; i < 3; i++) {
                        printf("Sexe joueur %d : ", i+1);
                        scanf("%s", &joueurs[i].sexe);
                       
                        printf("Nom joueur %d : ", i+1);
                        scanf("%s", &joueurs[i].nom);
                       
                        printf("Prenom joueur %d : ", i+1);
                        scanf("%s", &joueurs[i].prenom);
                       
                        printf("Age joueur %d : ", i+1);
                        scanf("%d", &joueurs[i].age);
                       
                        printf("\n");
                    }   
                   
                printf("-------------------------------------------------------");
                   
                    for (i = 0; i < 3; i++) {
                        printf("Sexe joueur %d : %s \n", i+1, joueurs[i].sexe);
                        printf("Nom joueur %d : %s \n", i+1, joueurs[i].nom);
                        printf("Prenom joueur %d : %s \n", i+1, joueurs[i].prenom);
                        printf("Age joueur %d : %d \n", i+1, joueurs[i].age);
                       
                        printf("\n");
                    }   
                   
                printf("-------------------------------------------------------");

                    mise_a_zero(joueurs);
                   
                    for (i = 0; i < 3; i++) {
                        printf("Sexe joueur %d : %s \n", i+1, joueurs[i].sexe);
                        printf("Nom joueur %d : %s \n", i+1, joueurs[i].nom);
                        printf("Prenom joueur %d : %s \n", i+1, joueurs[i].prenom);
                        printf("Age joueur %d : %d \n", i+1, joueurs[i].age);
                       
                        printf("\n");
                    }
                           
                    getchar();
                    return 0;
                } 

                void mise_a_zero(Personnes joueurs[])
                {
                    int i = 0;
                   
                    for (i = 0; i < 3; i++) {
                        joueurs[i].sexe = "";
                        joueurs[i].nom = "";
                        joueurs[i].prenom = "";
                        joueurs[i].age = 0;
                    }   
                }


                Je pense que celui qui répondra à ce topic répondra à beaucoup de zéros...

                ++ et merci d'avance,
                mleg
                • Partager sur Facebook
                • Partager sur Twitter
                  11 février 2006 à 11:39:28

                  scanf("%s", &joueurs[i].nom);

                  nom est un tableau de char.
                  S'il n'avait pas été dans une structure, tu aurais fait quoi ?

                  scanf("%s", nom);

                  Donc pas besoin du &, vu que ça renvoie l'adresse du tableaude char !

                  Soluce :

                  scanf("%s", joueurs[i].nom);
                  • Partager sur Facebook
                  • Partager sur Twitter

                  If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                    11 février 2006 à 12:01:09

                    Yeah merci M@téo ça me fais trois fautes en moins ! ;)

                    Mais maintenant il m'en reste une que je comprend pas :

                    Citation : 'Zone de la mort'

                    4 | parse error before "joueurs"



                    Il me met la même à la ligne 65 : une dans le prototype et une dans les paramètres de la fonction elle-même.

                    Puis ensuite :

                    Citation : 'Zone de la mort'

                    70 | `joueurs' undeclared (first use in this function)



                    Pourtant, j'envoie bien un tableau à la fonction, donc avec un pointeur sur la première case, non ?

                    On dirait que le compilateur ne reconnais pas mon type "Personnes" dans les paramètres des fonctions, car lorsque je le remplace par des int il n'y a plus d'erreur à ce niveau...

                    Bizarre bizarre...

                    Merci de vos réponses passés et futures !
                    ++
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème avec les 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