Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice recolte information sur les joueurs

    12 février 2008 à 14:49:19

    Salut j'ai essayer d'intégrer une demande d'information sur les joueur dans le jeu + ou - dans le cadre du chapitre "créer ses propres variables":

    Lors de la compilation on me signale des erreures dans le fichier d'en tête .h :
    le voici :
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <time.h>  
    4. typedef struct Personne Personne;
    5. struct Personne
    6. {
    7.         char nom[100];
    8.     char prenom[100];
    9. };



    Et voici maintenant mon fichier main pour voir si vous y trouveriez eventuellement des erreures, sachez que c'est la première fois que j'utilise des tableaux de structure ^^

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <time.h>  
    4. #include "structure.h"
    5. int main(int argc, char *argv[])
    6. {
    7. Personne joueur[2];
    8. int partie = 1;
    9. int nombreDeCoup = 0;
    10. int reponse = 0;
    11. int nombreDeJoueur = 0;
    12. long MIN = 1, MAX = 100;
    13. int nombreMystere = 0;
    14. int niveau = 0;
    15. int choixDuPremierJoueur = 0;
    16. printf("******\\\\\Devinez le nombre mystere, par Vicente/////******\n\n\n\n");
    17. while (partie)
    18. {
    19. do
    20. {
    21.         printf("Choisisser votre niveau de difficulte : \n\n niveau 1 : 1-100 \n niveau 2 : 1-1000 \n niveau 3 : 1-10000\n");
    22.         scanf("%ld" , &niveau);
    23. switch (niveau)     // choix du niveau de difficulté
    24. {
    25. case 1:
    26.         MAX = 100, MIN = 1;
    27.         break;
    28. case 2:
    29.         MAX = 1000, MIN = 1;
    30.         break;
    31. case 3:
    32.         MAX = 10000, MIN = 1;
    33.         break;
    34. default:
    35.         printf("Veut-tu choisir un niveau valable !");
    36.         break;
    37. }
    38. }while (niveau > 3);
    39. do
    40. {
    41. printf("Combien etes vous de joueur?\n\n 1 joueur?\n 2 joueurs?\n\n");
    42. scanf("%ld" , &nombreDeJoueur);
    43. switch (nombreDeJoueur)    // choix du nombre de joueur et declaration de l'identité de chaque joueur.
    44. {
    45. case 1:
    46.         printf("Quel est votre nom ? ");   // identitée joueur
    47.     scanf("%s", joueur[1].nom);
    48.     printf("Votre prenom ? ");
    49.     scanf("%s", joueur[1].prenom);
    50.         printf("Alors c'est parti !");
    51.         srand(time(NULL));
    52.         nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    53.         break;
    54. case 2:
    55.                 printf("Quel est votre nom joueur 1 ?\n ");  // identitée joueur 1
    56.     scanf("%s", joueur[1].nom);
    57.     printf("Votre prenom joueur 1 ?\n ");
    58.     scanf("%s", joueur[1].prenom);
    59.                 printf("Quel est votre nom joueur 2 ?\n ");  // identitée joueur 2
    60.     scanf("%s", joueur[2].nom);
    61.     printf("Votre prenom joueur 2 ?\n ");
    62.     scanf("%s", joueur[2].prenom);
    63. do
    64.                 {
    65.                         printf("lequel d'entre vous veux choisir un nombre? 1. %s \n 2. %s \n" , joueur[1] , joueur[2] );  // qui joue le premier?
    66.                         scanf("%ld" , &choixDuPremierJoueur);
    67.                         switch (choixDuPremierJoueur)
    68.                 {
    69.                 case 1:
    70.         printf("Alors %s doit entrer un nombre entre 1 et 100!\n" , joueur[1]);  // c'est le joueur 1 qui choisi un nombre
    71.         scanf("%ld" , &nombreMystere);
    72.         printf(" %s a toi de deviner ce nombre !\n" , joueur[2]);
    73.         break;
    74.                 case 2:
    75.         printf("Alors %s doit entrer un nombre entre 1 et 100!\n" , joueur[2]);  // c'est le joueur 2 qui choisi un nombre
    76.         scanf("%ld" , &nombreMystere);
    77.         printf(" %s a toi de deviner ce nombre !\n" , joueur[1]);
    78.         break;
    79.                 default:
    80.                         printf("donne moi un numero de joueur valable");   // on repose la question
    81.                         break;
    82.                         }
    83.                 }while (choixDuPremierJoueur >2);
    84. default:
    85.         printf("je te repose ma question, 1 ou 2 joueur?");
    86.         break;
    87. }
    88. }
    89. while (nombreDeJoueur >2);
    90.         system ("cls");
    91. do
    92. {
    93.         printf("Quel est le nombre?");
    94.         scanf("%ld" , &reponse);
    95. if (reponse > nombreMystere)
    96.         printf("C'est moins !\n\n");
    97. else if (reponse < nombreMystere)
    98.         printf("C'est plus !\n\n");
    99. else
    100.         printf("Bravo, vous avez trouve le nombre mystere !!!\n\n");
    101. nombreDeCoup++;
    102. }
    103. while (reponse != nombreMystere);
    104. printf(" Vous avez gagner en %ld coup\n\n" , nombreDeCoup);
    105. printf("Voulez-vous rejouer?\n\n 0. Non\n 1. Oui\n\n");
    106. scanf("%ld" , &partie);
    107. }
    108.   system("PAUSE");      
    109. }



    Merci d'avance d'avoir pris le temps de lire mon code, du moin la partie du code concernée (recolte de infos sur les player) car le reste fonctionne, pas la peine de s'y attarder ^^
    @ très bientot.


    PS : bon pour le .h j'ai vu qu'il me manquait un ; , ce que j'ai corriger.
    Mais on me signale bon nombre d'erreur dans le main, nottament la non-déclaration de la variable identité, comment je fait donc pour afficher mes informations sans celle ci?

    PS 2 :
    Bon je commence a me corriger tout seul,
    J'ai remis le code a jour (avec les petites corrections.. ^^ )
    Mais voila, une fois les information rentrée, le programme plante, pourquoi??? :euh::colere2:

    Le mode 1 joueur fonctionne très bien, seul le mode joueur 2 (le plus intérressant, plante après l'entrée des information sur les 2 joueurs, donc juste avant de demander qui debute la partie.
    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2008 à 15:00:08

      salut,
      Ça plante au debut de la partie car tu fais par exemple :
      1. printf("lequel d'entre vous veux choisir un nombre? 1. %s \n 2. %s \n" , joueur[1] , joueur[2] );  // qui joue le premier?

      il faut mettre le nom de la chaine de caractère viser après joueur[1] et joueur[2] comme ca :
      1. printf("lequel d'entre vous veux choisir un nombre? 1. %s \n 2. %s \n" , joueur[1].prenom , joueur[2].prenom );  // qui joue le premier?

      Toute les autre erreurs sont du même style .
      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2008 à 16:59:31

        Salut vicente59,

        1. #include <stdio.h>
        2. #include <stdlib.h>
        3. #include <time.h>  
        4. typedef struct Personne Personne;
        5. struct Personne
        6. {
        7.     char nom[100];
        8.     char prenom[100];
        9. };


        pourquoi inclure 'time.h'


        :magicien:
        • Partager sur Facebook
        • Partager sur Twitter
          12 février 2008 à 17:51:27

          Ouh la, il y a une grosse erreur, il faudra que tu relise la partie sur le préprocesseur, en effet lorsque tu fait un fichier d'entête il ne faut surtout pas déclarer dans le main ce que tu as déclaré dans le .h sinon cela entraîne un doublon et peut être source d'erreur.

          De plus il faut mettre dans le .h un petit système de protection pour la compilation (nécessaire lorsqu'il y a plusieurs fichiers source)

          1. /* Debut protection */
          2. #ifndef _MAIN
          3. #def _MAIN
          4. /* Includes */
          5. #include <stdio.h>
          6. #include <stdlib.h>
          7. #include <time.h>
          8. /* Defines */  
          9. /* Typedefs */
          10. typedef struct Personne Personne;
          11. struct Personne
          12. {
          13.     char nom[100];
          14.     char prenom[100];
          15. };
          16. /* Prototypes */
          17. /* Fin protection */
          18. #endif




          EDIT :

          Le programme plante car tu as oublié de corriger des occurences à joueur[1] et joueur[2] lignes 79,81,84 et 86 ^^
          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2008 à 21:03:24

            bon merci d'abord à vous tous^^

            mon programme marche enfin corectement, merci a vous, enfin presque ^^
            en effet lorsque je fait " quitter le jeu"
            J'ai droit a un jolie petit message d'erreur lorsque je veu appuyer sur une touche pour continuer ^^
            "Run-Time Check Failure #2 - Stack around the variable 'joueur' was corrupted."

            je vous rebalance mon code :D

            1. #ifndef _MAIN
            2. #define _MAIN
            3. #include <stdio.h>
            4. #include <stdlib.h>
            5. #include <time.h>  
            6. typedef struct Personne Personne;
            7. struct Personne
            8. {
            9.     char prenom[100];
            10. };
            11. #endif


            1. #include <stdio.h>
            2. #include <stdlib.h>
            3. #include <time.h>  
            4. #include "structure.h"
            5. int main(int argc, char *argv[])
            6. {
            7. Personne joueur[2];
            8. int partie = 1;
            9. int nombreDeCoup = 0;
            10. int reponse = 0;
            11. int nombreDeJoueur = 0;
            12. long MIN = 1, MAX = 100;
            13. int nombreMystere = 0;
            14. int niveau = 0;
            15. int choixDuPremierJoueur = 0;
            16. printf("******\\\\\Devinez le nombre mystere, par Vicente/////******\n\n\n\n");
            17. while (partie)
            18. {
            19. do
            20. {
            21.         printf("Choisisser votre niveau de difficulte : \n\n niveau 1 : 1-100 \n niveau 2 : 1-1000 \n niveau 3 : 1-10000\n");
            22.         scanf("%ld" , &niveau);
            23. switch (niveau)     // choix du niveau de difficulté
            24. {
            25. case 1:
            26.         MAX = 100, MIN = 1;
            27.         break;
            28. case 2:
            29.         MAX = 1000, MIN = 1;
            30.         break;
            31. case 3:
            32.         MAX = 10000, MIN = 1;
            33.         break;
            34. default:
            35.         printf("Veut-tu choisir un niveau valable !");
            36.         break;
            37. }
            38. }while (niveau > 3);
            39. do
            40. {
            41. printf("Combien etes vous de joueur?\n\n 1 joueur?\n 2 joueurs?\n\n");
            42. scanf("%ld" , &nombreDeJoueur);
            43. switch (nombreDeJoueur)    // choix du nombre de joueur et declaration de l'identité de chaque joueur.
            44. {
            45. case 1:
            46.         printf("Quel est votre prenom ? ");   // identitée joueur
            47.     scanf("%s", joueur[1].prenom);
            48.         printf("Alors c'est parti !");
            49.         srand(time(NULL));
            50.         nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
            51.         break;
            52. case 2:
            53.                 printf("Quel est votre prenom joueur 1 ?\n ");  // identitée joueur 1
            54.     scanf("%s", joueur[1].prenom);
            55.                 printf("Quel est votre prenom joueur 2 ?\n ");  // identitée joueur 2
            56.     scanf("%s", joueur[2].prenom);
            57. do
            58.                 {
            59.                         printf("lequel d'entre vous veux choisir un nombre? 1. %s \n 2. %s \n" , joueur[1].prenom , joueur[2].prenom );  // qui joue le premier?
            60.                         scanf("%ld" , &choixDuPremierJoueur);
            61.                         switch (choixDuPremierJoueur)
            62.                 {
            63.                 case 1:
            64.         printf("Alors %s doit entrer un nombre entre 1 et 100!\n" , joueur[1].prenom);  // c'est le joueur 1 qui choisi un nombre
            65.         scanf("%ld" , &nombreMystere);
            66.         printf(" %s a toi de deviner ce nombre !\n" , joueur[2].prenom);
            67.         break;
            68.                 case 2:
            69.                         printf("Alors %s doit entrer un nombre entre 1 et 100!\n" , joueur[2].prenom);  // c'est le joueur 2 qui choisi un nombre
            70.         scanf("%ld" , &nombreMystere);
            71.         printf(" %s a toi de deviner ce nombre !\n" , joueur[1].prenom);
            72.         break;
            73.                 default:
            74.                         printf("donne moi un numero de joueur valable");   // on repose la question
            75.                         break;
            76.                         }
            77.                 }while (choixDuPremierJoueur >2);
            78. default:
            79.         printf("je te repose ma question, 1 ou 2 joueur?");
            80.         break;
            81. }
            82. }
            83. while (nombreDeJoueur >2);
            84.         system ("cls");
            85. do
            86. {
            87.         printf("Quel est le nombre?");
            88.         scanf("%ld" , &reponse);
            89. if (reponse > nombreMystere)
            90.         printf("C'est moins !\n\n");
            91. else if (reponse < nombreMystere)
            92.         printf("C'est plus !\n\n");
            93. else
            94.         printf("Bravo, vous avez trouve le nombre mystere !!!\n\n");
            95. nombreDeCoup++;
            96. }
            97. while (reponse != nombreMystere);
            98. printf(" Vous avez gagner en %ld coup\n\n" , nombreDeCoup);
            99. printf("Voulez-vous rejouer?\n\n 0. Non\n 1. Oui\n\n");
            100. scanf("%ld" , &partie);
            101. }
            102.   system("PAUSE");      
            103. }



            en esperant que vous allez trouver l'erreur "qui gache tou xd" :-°

            Merci d'avance
            • Partager sur Facebook
            • Partager sur Twitter

            exercice recolte information sur les joueurs

            × 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