Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableaux dans une structure

exercise : type Personne

    2 janvier 2009 à 16:33:46

    Bonjour a tous .
    Tout d'abords pertmettez moi de vous souhaiter une bonne et heureuse année 2009 :)
    J'ai un probleme avec cet exercise, lors de la compilation je n'ai aucun souci particulier, mais lors de l'execution du programme, plus exactement à la demande du troisieme joueur ca plante !! je vous informe que je suis avec Code blocs sous windows.. De plus il doit y avoir un probleme dans le code en lui même car lorsque je veux résumer les information sur le genre ( fille ou garcon ) j'ai un jolie smile qui s'affiche : blanc pour une fille , noir pour un garcon ^^
    #include <stdlib.h>
    #include <stdio.h>
    #include "info.h"
    
    int main(int argc, char *argv[])
    {
    
        printf("    =============================================================\n\n");
        printf("   ==A tour de role veuillez entrer vos informations personnelles==\n\n");
        printf("    =============================================================\n\n");
    
        Personne joueur[3]; //il y aura trois joueurs, Personne est le nom de la structure ( voir ds .h )
    
        printf("Quel est ton nom ? ");
        scanf("%s", joueur[0].nom);
        printf("Ton prenom ? ");
        scanf("%s", joueur[0].prenom);
        printf("1.garcon? 2.fille?\n");
        scanf("%ld", joueur[0].garcon);
    
    
        printf("tu t'appelles %s %s et tu es %s \n\n", joueur[0].prenom, joueur[0].nom,joueur[0].garcon); // résumé des infos du joueur 1
    
        printf("Quel est ton nom ? ");
        scanf("%s", joueur[1].nom);
        printf("Ton prenom ? ");
        scanf("%s", joueur[1].prenom);
        printf("1.garcon? 2.fille?\n");
        scanf("%ld", joueur[1].garcon);
    
        printf("tu t'appelles %s %s et tu es %s \n\n", joueur[1].prenom, joueur[1].nom, joueur[1].garcon);// résumé des infos du joueur 2
    
        printf("Quel est ton nom ? ");
        scanf("%s", joueur[2].nom);
        printf("Ton prenom ?  ");
        scanf("%s", joueur[2].prenom);
        printf("1.garcon? 2.fille?\n");
        scanf("%ld", joueur[2].garcon);
    
        printf("tu t'appelles %s %s et tu es %s \n\n", joueur[2].prenom, joueur[2].nom, joueur[2].garcon);// résumé des infos du joueur 2
    
        printf("Vos informations :\n %s %s, %ld ,\n%s %s %ld ,\n%s %s %ld \n,",joueur[0].prenom, joueur[0].nom,joueur[0].garcon, joueur[1].prenom, joueur[1].nom, joueur[1].garcon, joueur[2].prenom, joueur[2].nom, joueur[2].garcon);// résumé des infos de tous les joueurs
    
        return 0;
    }
    


    mon info.h :
    #include <stdlib.h>
    #include<stdio.h>
    
    struct Personne
    {
        char nom[100];
        char prenom[100];
        char adresse[1000];
    
        long age;
        int garcon; // Booléen : 1 = garçon, 0 = fille
    };
    


    voici le code erreur de windows :D : AppName: test.exe AppVer: 0.0.0.0 ModName: msvcrt.dll
    ModVer: 7.0.2600.5512 Offset: 00034995

    si quelqu'un comprend quelque chose ... ;)

    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2009 à 16:58:54

      Premièrement, lorsque tu créer ton struct, tu as oublié typedef :
      #include <stdlib.h>
      #include<stdio.h>
      
      typedef struct Personne Personne;
      struct Personne
      {
          char nom[100];
          char prenom[100];
          char adresse[1000];
      
          long age;
          int garcon; // Booléen : 1 = garçon, 0 = fille
      };
      


      [EDIT]

      Puis, lors de la compilation, je reçoit une multitude de Warning concernant tes lignes ayant joueur[x].garcon, et ton programme plante justement à ces endroits chez moi (Lorsque je me fais demander le sexe du premier joueur en particulier).
      • Partager sur Facebook
      • Partager sur Twitter
      Character Artist @ Framestore Montreal. http://felixcharacters.com
        2 janvier 2009 à 17:03:16

        Hello, bonne année à toi aussi!
        Pour les smiles, c'est normal, tu a mis %s au lieu de %ld. C'est étrange qu'il n'ait pas planté la mais je pense qu'il affiche le caractere numéro 1 ou 2 de la liste de la console windows, qui sont effectivement des smiles(je les ai déjà utilisés).
        • Partager sur Facebook
        • Partager sur Twitter
          2 janvier 2009 à 17:23:30

          Salut,

          Et surtout, lorsque tu récupères le type de la personne (garçon ou fille), tu mets:

          scanf("%ld", joueur[0].garcon);
          


          Alors que dans le scanf, tu dois envoyer l'adresse de la variable. Tu dois donc écrire:


          scanf("%d", &(joueur[0].garcon));
          


          Note que pour récupérer un int en notation décimale, tu dois écrire %d et pas %ld.
          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2009 à 17:38:22

            Citation : papixounet

            J'ai un probleme avec cet exercise, lors de la compilation je n'ai aucun souci particulier,


            Tu ne compiles pas en C...
            -------------- Build: Debug in hello ---------------
            
            Compiling: main.c
            Linking console executable: bin\Debug\hello.exe
            C:\dev\hello\main.c: In function `main':
            C:\dev\hello\main.c:12: error: `Personne' undeclared (first use in this function)
            C:\dev\hello\main.c:12: error: (Each undeclared identifier is reported only once
            C:\dev\hello\main.c:12: error: for each function it appears in.)
            C:\dev\hello\main.c:12: error: syntax error before "joueur"
            C:\dev\hello\main.c:15: error: `joueur' undeclared (first use in this function)
            C:\dev\hello\main.c: At top level:
            C:\dev\hello\main.c:5: warning: unused parameter 'argc'
            C:\dev\hello\main.c:5: warning: unused parameter 'argv'
            Process terminated with status 1 (0 minutes, 0 seconds)
            5 errors, 2 warnings

            Avec ce code rendu compilable en C,
            #include <stdlib.h>
            #include <stdio.h>
            #include "info.h"
            
            int main(int argc, char *argv[])
            {
                /* -ed- manquait 'struct'
                        a definir au debut d'un bloc.
                 */
                struct Personne joueur[3]; /* il y aura trois joueurs, Personne est le nom de la structure ( voir ds .h ) */
            
            
                printf("    =============================================================\n\n");
                printf("   ==A tour de role veuillez entrer vos informations personnelles==\n\n");
                printf("    =============================================================\n\n");
            
                printf("Quel est ton nom ? ");
                scanf("%s", joueur[0].nom);
                printf("Ton prenom ? ");
                scanf("%s", joueur[0].prenom);
                printf("1.garcon? 2.fille?\n");
                scanf("%ld", joueur[0].garcon);
            
            
                printf("tu t'appelles %s %s et tu es %s \n\n", joueur[0].prenom, joueur[0].nom,joueur[0].garcon); /* résumé des infos du joueur 1 */
            
                printf("Quel est ton nom ? ");
                scanf("%s", joueur[1].nom);
                printf("Ton prenom ? ");
                scanf("%s", joueur[1].prenom);
                printf("1.garcon? 2.fille?\n");
                scanf("%ld", joueur[1].garcon);
            
                printf("tu t'appelles %s %s et tu es %s \n\n", joueur[1].prenom, joueur[1].nom, joueur[1].garcon);/* résumé des infos du joueur 2 */
            
                printf("Quel est ton nom ? ");
                scanf("%s", joueur[2].nom);
                printf("Ton prenom ?  ");
                scanf("%s", joueur[2].prenom);
                printf("1.garcon? 2.fille?\n");
                scanf("%ld", joueur[2].garcon);
            
                printf("tu t'appelles %s %s et tu es %s \n\n", joueur[2].prenom, joueur[2].nom, joueur[2].garcon);/* résumé des infos du joueur 2 */
            
                printf("Vos informations :\n %s %s, %ld ,\n%s %s %ld ,\n%s %s %ld \n,",joueur[0].prenom, joueur[0].nom,joueur[0].garcon, joueur[1].prenom, joueur[1].nom, joueur[1].garcon, joueur[2].prenom, joueur[2].nom, joueur[2].garcon);/* résumé des infos de tous les joueurs */
            
                return 0;
            }
            

            les avertissements signalés indiquent où sont certaines de tes erreurs de codage :
            -------------- Build: Debug in hello ---------------
            
            Compiling: main.c
            Linking console executable: bin\Debug\hello.exe
            C:\dev\hello\main.c: In function `main':
            C:\dev\hello\main.c:22: warning: format argument is not a pointer (arg 2)
            C:\dev\hello\main.c:25: warning: format argument is not a pointer (arg 4)
            C:\dev\hello\main.c:32: warning: format argument is not a pointer (arg 2)
            C:\dev\hello\main.c:34: warning: format argument is not a pointer (arg 4)
            C:\dev\hello\main.c:41: warning: format argument is not a pointer (arg 2)
            C:\dev\hello\main.c:43: warning: format argument is not a pointer (arg 4)
            C:\dev\hello\main.c:45: warning: long int format, int arg (arg 4)
            C:\dev\hello\main.c:45: warning: long int format, int arg (arg 7)
            C:\dev\hello\main.c:45: warning: long int format, int arg (arg 10)
            C:\dev\hello\main.c: At top level:
            C:\dev\hello\main.c:5: warning: unused parameter 'argc'
            C:\dev\hello\main.c:5: warning: unused parameter 'argv'
            Output size is 19.89 KB
            Process terminated with status 0 (0 minutes, 0 seconds)
            0 errors, 11 warnings

            Sinon, ton code est trop lourd. Tu devrais utiliser les boucles, c'est fait pour et ça évite de se répéter... Quand on utilise des tableaux, les boucles ne sont jamais loin...
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              2 janvier 2009 à 17:44:33

              Après toutes les informations données, tu peux facilement régler ton problème.

              Ensuite, il y a facilement place à l'amélioration, même si -ed- n'a en gros fait que répéter un peu ce que moi et rocklee.gt disions, il introduit quelque chose de très important pour ton programme : les boucles allègent le code

              Aussi, il serait préférable d'utiliser une saisie sécurisé des nom, car ici il peut facilement y avoir dépassement de mémoire... Un tuto est disponible : http://www.siteduzero.com/tutoriel-3-1 [...] ecurisee.html
              • Partager sur Facebook
              • Partager sur Twitter
              Character Artist @ Framestore Montreal. http://felixcharacters.com
                3 janvier 2009 à 20:31:03

                merci beaucoup je vais essayer tous cela .. ;)
                • Partager sur Facebook
                • Partager sur Twitter

                Tableaux dans une 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