Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le Pendu

Le retour

    30 août 2007 à 20:54:19

    J'ai presque fini mon pendu (j'y arrive enfinnnnnnn ^^ ), mais (oui il y a toujours un mais ...) j'ai encore un petit problème. Mon projet compile bien sans erreur mais il ne fonctionne pas :

    main.c :

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <ctype.h>
    5. #include <time.h>
    6. #include "main.h"
    7. #include "dico.h"
    8. int main(int argc, char *argv[])
    9. {
    10.   char mot_secret[100] = {0}, *recherche_lettre = NULL;
    11.   long longueur_mot_secret = 0;
    12.   long coups_restants = 10;
    13.   char lettre_trouvee = 0;
    14.   long i = 0;
    15.   char retenir[100] = {0};
    16.   char *mot_cherche = NULL;
    17.   if (!pioche_mot(mot_secret))
    18.      exit(0);
    19.   mot_cherche = malloc(longueur_mot_secret * sizeof(int));
    20.   if (mot_cherche == NULL)
    21.      exit(0);
    22.   longueur_mot_secret = strlen(mot_secret);
    23.   for (i = 0; i < longueur_mot_secret; i++)
    24.   {
    25.       mot_cherche[i] = '*';
    26.   }
    27.   printf("Bienvenue dans le pendu!\n\n");
    28.   while (strcmp(mot_secret, mot_cherche) != 0 && coups_restants != 0)
    29.   {
    30.         printf("Il vous reste %ld coups a jouer\n", coups_restants);
    31.         printf("Quel est le mot secret ? ");
    32.         for (i = 0 ; i < longueur_mot_secret ; i++)
    33.         {
    34.               if (lettre_trouvee == mot_secret[i])
    35.               {
    36.                    retenir[i] = 1;
    37.               }
    38.               if (retenir[i])
    39.               {
    40.                    printf("%c", mot_secret[i]);
    41.               }
    42.               else
    43.               {
    44.                   printf("*");
    45.               }
    46.         }
    47.         printf("\nProposez une lettre : ");
    48.         lettre_trouvee = lire_caractere();
    49.         recherche_lettre = strchr(mot_secret, lettre_trouvee);
    50.         if (recherche_lettre == NULL)
    51.         {
    52.              coups_restants--;
    53.         }
    54.         decouvrir_caractere(mot_cherche, mot_secret, longueur_mot_secret, lettre_trouvee);
    55.         printf("\n\n");
    56.   }
    57.   if (coups_restants == 0)
    58.   {
    59.       printf("Desole vous avez perdu le mot secret etait %s\n\n", mot_secret);
    60.   }
    61.   else if (strcmp(*mot_secret, *mot_cherche) == 0)
    62.   {
    63.       printf("Vous avez gagnez!!! Le mot secret etait bien %s\n\n", mot_secret);
    64.   }
    65.   system("PAUSE");      
    66.   return 0;
    67. }


    main.h :

    1. #ifndef DEF_DICO
    2. #define DEF_DICO
    3. void decouvrir_caractere(char *mot_cherche, const char *mot_secret, long longueur_mot_secret, char lettre_trouvee);
    4. char lire_caractere();
    5. char lire_caractere()
    6. {
    7.     char caractere = 0;
    8.     caractere = getchar(); // On lit le premier caractère
    9.     caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
    10.     // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
    11.     while (getchar() != '\n') ;
    12.     return caractere; // On retourne le premier caractère qu'on a lu
    13. }
    14. void decouvrir_caractere(char *mot_cherche, const char *mot_secret, long longueur_mot_secret, char lettre_trouvee)
    15. {
    16.      long i = 0;
    17.      for (i = 0; i < longueur_mot_secret ; i++)
    18.      {
    19.          if (mot_secret[i] == lettre_trouvee)
    20.          {
    21.               mot_cherche[i] = lettre_trouvee;
    22.          }
    23.      }
    24. }
    25. #endif


    dico.c :

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <ctype.h>
    5. #include <time.h>
    6. #include "dico.h"
    7. int pioche_mot(char mot_secret[])
    8. {
    9.     FILE* dico = NULL;
    10.     long nombre_mot = 0;
    11.     char caractere_lu = 0;
    12.     long numero_choisi = 0;
    13.     char *mot_pioche = NULL;
    14.     dico = fopen("dico.txt", "r");
    15.     if (dico != NULL)
    16.     {
    17.              do
    18.              {
    19.                      caractere_lu = fgetc(dico);
    20.                      if (caractere_lu == '\n')
    21.                      {
    22.                           nombre_mot++;
    23.                      }
    24.              }while (caractere_lu != EOF);
    25.              rewind(dico);
    26.              numero_choisi = numero_aleatoire(nombre_mot);
    27.              while (numero_choisi > 0)
    28.              {
    29.                    caractere_lu = fgetc(dico);
    30.                    if (caractere_lu == '\n')
    31.                    {
    32.                         numero_choisi--;
    33.                    }
    34.              }
    35.              fgets(mot_pioche, 100, dico);
    36.              mot_pioche[strlen(mot_pioche) - 1] = '\0';
    37.              fclose(dico);
    38.              return 1;
    39.     }
    40.     else
    41.     {
    42.         printf("Impossible d'ouvrir le fichier dico.txt");
    43.     }
    44. }
    45. long numero_aleatoire(long nombre_max)
    46. {
    47.      srand(time(NULL));
    48.      return (rand() % (nombre_max));
    49. }


    dico.h :

    1. #ifndef DEF_DICO
    2. #define DEF_DICO
    3. int pioche_mot(char mot_pioche[]);
    4. long numero_aleatoire(long nombre_mot);
    5. #endif


    Voila tous mon projet (non mais c'est qui ce fou qui met tous son projet comme sa !!! :colere2:)
    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2007 à 4:23:49

      Citation : Fabgor

      Mon projet compile bien sans erreur.



      J'adore quand les gens disent ça... -_-

      ==>
      dico.c: Dans la fonction «pioche_mot» :
      dico.c:55: attention : control reaches end of non-void function
      main.c: Dans la fonction «main» :
      main.c:20: attention : implicit declaration of function «pioche_mot»
      main.c:76: attention : passing argument 1 of «strcmp» makes pointer from integer without a cast
      main.c:76: attention : passing argument 2 of «strcmp» makes pointer from integer without a cast
      • Partager sur Facebook
      • Partager sur Twitter
        31 août 2007 à 16:49:15

        Merci à toi tu compiles avec quel IDE? Et ça veut dire quoi tous ça?
        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2007 à 16:53:58

          Ca veut dire que ton compilateur est mal réglé..

          Sous Code::Blocks
          -> settings -> compiler -> (dans l'onglet compiler (le 1er)) -> other option ->

          Citation : A copier / coller

          -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes


          Tu valides, et dans ton projet tu fait: CTRL+f11 et tu vois ce qu'on ton compilo te dit :)

          Ici il t'annonce que tu sais pas utiliser la fonction strcmp :)
          • Partager sur Facebook
          • Partager sur Twitter
            31 août 2007 à 16:58:04

            Le saligo!!! :p Mais pourtant quesqu'il ne va pas dans ma fonction strcmp?
            • Partager sur Facebook
            • Partager sur Twitter
              1 septembre 2007 à 0:11:51

              Voilà son prototype :
              1. int strcmp (const char *s1, const char *s2);


              Hors, tu lui donnes des char en paramètres, et pas des char* ==> cf cours sur les pointeurs.
              • Partager sur Facebook
              • Partager sur Twitter
                2 septembre 2007 à 17:54:15

                Mais mes paramètres sont déjà des pointeurs. A moins que je n'ai rien compris.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 septembre 2007 à 18:04:05

                  Compares les lignes 36 et 76 de ton main.c, tu verras probablement le problème.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 septembre 2007 à 18:37:46

                    J'ai enlevé les '*' mais je ne m'en souvenez plus qu'ils étaient la, mais ça n'es toujours pas la solution du problème j'ai recompiler avec code:block et lui me di que j'ai un problème avec la ligne 20 ('pioche_mot' cannot be used as a function) et 23 (invalid conversion from 'void*' to 'char*').
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 septembre 2007 à 19:17:07

                      1. mot_cherche = malloc(longueur_mot_secret * sizeof(int));

                      Pourquoi sizeof(int)?

                      ton main.h :
                      1. #ifndef DEF_DICO
                      2. #define DEF_DICO

                      Faut arreter de coder à la va vite...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 septembre 2007 à 20:05:20

                        La version que j'ai envoyé c'est une version ancienne mais je n'avais pas changé le int en char, et donc même avec ces 2 modifications(mon main.h dsl) ça ne marche toujours pas.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 septembre 2007 à 23:59:24

                          Modifie les sources de ton 1er post avec ta dernière version.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Pendu

                          × 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