Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le pendu avec dictionnaire

Je vais devenir fou ^^

    12 février 2008 à 17:43:15

    EDIT:c'est bon j'ai trouver j'avais mis 'EOF' a la place de EOF
    ^^


    ben voila ca fais 2 jour que je cherche l'erreur que j'ai faites alors que j'ai verifier et reverifier des dizaines de vois avec la correction pourtant quand je lance le programme ca me fais une console toute noire voici tout les fichier:

    EDIT: je viens de faire quelques petit teste a coups de printf mes conclusions sont: le printf marche avant le tout premier if dans main.c mais ne fonctione pas juste apres ni dedans si ca peut vous aider...

    main.c:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <ctype.h>
    4. #include "main.h"
    5. #include "dico.h"
    6. int main(int argc, char *argv[])
    7. {
    8.   char motSecret[100] = {0};
    9.   int *lettreTrouver = NULL;
    10.   char lettrePropose = 0;
    11.   long nombreDeVie = 10;
    12.   long i = 0;
    13.   long tailleMot = 0;
    14.   if(!piocherMot(motSecret))
    15.   exit(0);
    16.   tailleMot = strlen(motSecret);
    17.   lettreTrouver = malloc(tailleMot * sizeof(int));
    18.   if(lettreTrouver == NULL)
    19.   exit(0);
    20.   for(i = 0; i < tailleMot; i++)
    21.   lettreTrouver[i] = 0;
    22. printf("Bonjour et bienvenue dans le 2eme jeu de la Nolife socity: Le pendu!!\n\n\n");
    23. do
    24. {
    25.      printf("\n\nIl vous reste %ld vies\n", nombreDeVie);
    26.      printf("Quel est le mot secret?");
    27.      for(i = 0; i < 6; i++)
    28.      {
    29.                           if(lettreTrouver[i])
    30.                           {
    31.                                 printf("%c", motSecret[i]);
    32.                           }
    33.                           else
    34.                           {
    35.                               printf("*");
    36.                           }
    37.      }
    38.      printf("\nQuel lettre proposez-vous?");
    39.      lettrePropose = lireCaractere();
    40.      if(!rechercheLettre(lettrePropose, motSecret, lettreTrouver))
    41.      {
    42.                                         nombreDeVie--;
    43.      }
    44. }while(nombreDeVie > 0 && !gagne(lettreTrouver, tailleMot));
    45. if(gagne(lettreTrouver, tailleMot))
    46. {
    47.          printf("\n\n\nGAGNE! le mot secret etait: %s\n", motSecret);
    48. }
    49. else
    50. {
    51.     printf("\n\n\nPERDU! le mot secret etait: %s\n", motSecret);
    52. }
    53.   free(lettreTrouver);
    54.   system("PAUSE");      
    55.   return 0;
    56. }
    57. char lireCaractere()
    58. {
    59.      char caractere = 0;
    60.      caractere = getchar();
    61.      caractere = toupper(caractere);
    62.      while(getchar() != '\n');
    63.      return caractere;
    64. }
    65. int rechercheLettre(char lettrePropose, char motSecret[], int lettreTrouver[])
    66. {
    67.     long i = 0;
    68.     int bonneLettre = 0;
    69.        for(i = 0; motSecret[i] != '\0'; i++)
    70.        {
    71.                if(lettrePropose == motSecret[i])
    72.                {
    73.                                 bonneLettre = 1;
    74.                                 lettreTrouver[i] = 1;
    75.                }
    76.        }
    77.     return bonneLettre;
    78. }
    79. int gagne(int lettreTrouver[], long tailleMot)
    80. {
    81.     long i = 0;
    82.     int joueurGagne = 1;
    83.     for(i = 0; i < tailleMot; i++)
    84.     {
    85.           if(lettreTrouver[i] == 0)
    86.           {
    87.                               joueurGagne = 0;
    88.           }
    89.     }
    90.     return joueurGagne;
    91. }


    main.h:
    1. #ifndef __MAIN_H
    2. #define __MAIN_H
    3. int rechercheLettre(char lettrePropose, char motSecret[], int lettreTrouver[]);
    4. int gagne(int lettreTrouver[], long tailleMot);
    5. char lireCaractere();
    6. #endif


    dico.c:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <time.h>
    4. #include <string.h>
    5. #include "dico.h"
    6. int piocherMot(char *motPiocher)
    7. {
    8.     FILE* dico = NULL;
    9.     long nombreMot = 0, numChoisi = 0, i = 0;
    10.     int caractereLu = 0;
    11.     dico = fopen("dico.txt", "r");
    12.     if (dico == NULL)
    13.     {
    14.              printf("\nImpossible de charger le dictionaire de mots");
    15.              return 0;
    16.     }
    17.     do
    18.     {
    19.              caractereLu = fgetc(dico);
    20.              if(caractereLu == '\n')
    21.              {
    22.                             nombreMot++;
    23.              }
    24.     }while(caractereLu != 'EOF');
    25.     numChoisi = nombreAleatoire(nombreMot);
    26.     rewind(dico);
    27.     while(numChoisi > 0)
    28.     {
    29.                caractereLu = fgetc(dico);
    30.                if(caractereLu == '\n')
    31.                {
    32.                               numChoisi --;
    33.                }    
    34.     }
    35.     fgets(motPiocher, 100, dico);
    36.     motPiocher[strlen(motPiocher) - 1] = '\0';
    37.     fclose(dico);
    38.     return 1;
    39. }
    40. long nombreAleatoire(long nombreMax)
    41. {
    42.      srand(time(NULL));
    43.      return (rand()% nombreMax);
    44. }


    et dico.h:
    1. #ifndef __DICO_H
    2. #define __DICO_H
    3. int piocherMot(char *motPiocher);
    4. long nombreAleatoire(long nombreMax);
    5. #endif


    voila merci d'avance et si vous trouver c'est que vous etes vraiment des betes de programmation^^ ou alors que c'est moi qui suis une merde...
    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2008 à 22:36:35

      Commence par fractionner ton code en 4-5 modules et non seulement tu verras clair mais tu sauras ainsi vite où est ton bug!

      Je connais un programmeur qui ne programme jamais plus de 5 lignes de code par fonction.

      Ainsi non seulement ses fonctions sont réutilisables à l'intérieur d'un même projet mais elles le sont dans d'autres projets!

      C'est une excellente habitude à prendre!
      • Partager sur Facebook
      • Partager sur Twitter

      Le pendu avec dictionnaire

      × 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