Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation des types de variables perso

    16 mai 2006 à 20:13:33

    Voila je suis dans le cours de C, partie II
    là où l'on doit créer un type de variables nommé Personne.
    Je mets donc un fichier .h ma déclaration de type de variables.
    Il s'agit de l'exercice qui se troue en milieu de pages.

    Mon IDE est DevC++

    typedef struct Personne Personne
    struct Personne
    {
           char nom[100];
           char prenom[100];
           char adresse[100];
           
           long age;
           int garçon;
    };


    Puis voici ma page .c

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

    int main(int argc, char *argv[])
    {
        Personne joueur;

    printf ("Quel est ton prénom ? ");
    scanf ("%s",joueur.prenom);

    printf("\nTu t'appelles %s",joueur.prenom);
    system("PAUSE");
      return 0;
    }


    Lorsque je compile, le compilateur me marque

    Citation : Compilateur

    `Personne' undeclared (first use in this function)



    Je change donc mon code et le remplace par celui-ci

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

    int main(int argc, char *argv[])
    {
        struct Personne joueur;

    printf ("Quel est ton prénom ? ");
    scanf ("%s",joueur.prenom);

    printf("\nTu t'appelles %s",joueur.prenom);
    system("PAUSE");
      return 0;
    }

    Et voilà ce que ça me répond

    Citation : Compilateur

    storage size of 'joueur' isn't known


    D'où vient le problème.

    PS Pour l'include, je suis obligé d'utiliser ce symbole ' au lieu de " .
    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2006 à 20:14:56

      Merci d'utiliser la balise "code" pour mettre en forme les codes, comme expliqué dans ce post-it :
      http://www.siteduzero.com/forum-83-6661-regles-de-ce-forum.html

      Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

      Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

      Citation : Pas de titre

      int main(int argc, char *argv[])
      {
      long choixOperation;

      printf("Choisissez l'operation a effectuer \n\n");
      /* etc. */
      }



      Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

      int main(int argc, char *argv[])
      {
          long choixOperation;

          printf("Choisissez l'operation a effectuer \n\n");
          /* etc. */
      }


      C'est plus clair n'est-ce pas ? :)
      N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.


      [Ceci est une réponse semi-automatique]

      Edit personnel : Y en a marre hein ! On ferme pas encore pour mauvaise utilisation du Zcode mais quand même Mode d'emploi Mode d'emploi Mode d'emploi Mode d'emploi. La premiere chose à faire avant de poster sur un forum c'est de se renseigner sur ses règles et regarder quelques posts (surtout pour ce qui concerne le code) pour voir comment sont présentées les choses.
      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2006 à 20:25:23

        Tu n'a pas mis de ";" a la fin de t'a structure
        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2006 à 20:37:52

          Heu aussi, scanf prend en 2nd paramètre l'adresse de la variable où doit être enregistré le résultat donc ça ne risque pas de marcher:

          scanf ("%s",joueur.prenom);

          Essaye plutôt:

          scanf ("%s",&joueur.prenom);
          • Partager sur Facebook
          • Partager sur Twitter
            16 mai 2006 à 20:40:59

            Oui mais non, ici prenom est un char [] donc "prenom" est deja une adresse.
            Faut éviter les conseils bidons ;)
            • Partager sur Facebook
            • Partager sur Twitter
              16 mai 2006 à 20:57:58

              aïe, c'est vrai :/ désolé.
              le pire c'est qu'étant donné que je n'étais pas sûr de la syntaxe, j'ai fais un test rapide avec le & et ça a marché. (mais pas pensé à tester sans:-.).
              • Partager sur Facebook
              • Partager sur Twitter
                16 mai 2006 à 21:02:01

                Non, ça ne devrait pas marcher, tu écrirais à l'adresse du pointeur. Les notations ne sont en aucun cas équivalentes. Le passage d'un char** n'est pas simplement déconseillé, il produit des résultats imprévisibles (souvent seg. fault, ici écriture sur un pointeur constant...).
                • Partager sur Facebook
                • Partager sur Twitter
                  17 mai 2006 à 0:18:08

                  Oups désolé Kayl, j'ai rétabli l'erreur.

                  Sinon pour Toun1, j'ai mis les ;
                  et la compilation plante toujours.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mai 2006 à 10:00:13

                    Citation : IGCman

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


                    PS Pour l'include, je suis obligé d'utiliser ce symbole ' au lieu de " .


                    o_O Pourquoi ? C'est très faux...
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      17 mai 2006 à 13:14:21

                      Je sais pas si tu l'as r'ajouté, mais il faut un ; àla fin du typedef.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2006 à 22:23:11

                        Bon après quelques recherches dans le cours de Christian Casteyde, j'ai
                        réussi à remédier à mon problème.

                        Voici mon fichier .h
                        struct Personne
                        {
                               char nom[100];
                               char prenom[100];
                               char adresse[100];
                               
                               long age;
                               
                        }moi;


                        Et voici mon fichier main.c
                        #include <stdio.h>
                        #include <stdlib.h>
                        #include "typpers.h"

                        int main(int argc, char *argv[])
                        {


                        struct Personne moi, joueur;


                        printf ("Quel est ton prénom ? ");
                        scanf ("%s",joueur.prenom);

                        printf("\nTu t'appelles %s",joueur.prenom);
                        system("PAUSE");
                          return 0;
                        }


                        J'ai ajouté un mot à la fin de ma structure qui fonctionne comme variable.

                        Pour la déclaration de la variable, en C, celle-ci doit être obligatoirement précédée par le mot struct, c'est en C++ que ce n'est pas obligatoire donc M@teo21 devrais revoir son cours.

                        Ainsi la caratéristique de la structure c'est son nom et sa variable.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 mai 2006 à 0:40:47

                          Citation : IGCman

                          Pour la déclaration de la variable, en C, celle-ci doit être obligatoirement précédée par le mot struct, c'est en C++ que ce n'est pas obligatoire donc M@teo21 devrais revoir son cours.


                          Pipeau.

                          Dans le cours de M@teo, il y a typedef struct xxx xxx;, ce qui fait que l'on peut utiliser Personne à la place de struct Personne. Quand tu connaitras le C, tu pourras te permettre de faire des remarques. En attendant, contente toi de lire, d'apprendre et de poser des questions.

                          Citation : Tuto C



                          typedef struct Coordonnees Coordonnees;
                          struct Coordonnees
                          {
                              long x;
                              long y;
                          };

                          int main(int argc, char *argv[])
                          {
                              Coordonnees point; // L'ordinateur comprend qu'il s'agit de "struct Coordonnees" grâce au typedef
                              return 0;
                          }


                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !

                          Utilisation des types de variables perso

                          × 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