Partage
  • Partager sur Facebook
  • Partager sur Twitter

codes qui ne marchent pas

pendu

    13 mai 2006 à 23:38:05

    Salut,
    voila mon but est de verifier le code final des pendus.

    1j'ai crée un fichier texte dico.txt ou j'ai mis des noms secrets :
    blanc
    jaune
    orange
    vert
    bleu
    2 etape j'ai crée un fichier texte dico.h ou j'ai fait les prototypes de dico.c:

    #ifndef DEF_DICO
    #define DEF_DICO


    int piocherMot(char *motPioche);
    long nombreAleatoire(long nombreMax);

    #endif


    3 j'ai fait le fichier dico.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>

    #include "dico.h"


    int piocherMot(char *motPioche)
    {
        FILE* dico = NULL; // Le pointeur de fichier qui va contenir notre fichier
        long nombreMots = 0‚ numMotChoisi = 0;
        int caractereLu = 0;

        dico = fopen("dico.txt""r"); // On ouvre le dictionnaire en lecture seule

        // On vérifie si on a réussi à ouvrir le dictionnaire
        if (dico == NULL) // Si on n'a PAS réussi à ouvrir le fichier
        {
            printf("\nImpossible de charger le dictionnaire de mots");
            return 0; // On retourne 0 pour indiquer que la fonction a échoué
            // A la lecture du return‚ la fonction s'arrête immédiatement.
        }

        // On compte le nombre de mots dans le fichier (il suffit de compter les
        // entrées \n). Pensez à laisser une Entrée après le dernier mot du dico !
        do
        {
            caractereLu = fgetc(dico);
            if (caractereLu == '\n')
                nombreMots++;
        } while(caractereLu != EOF);

        numMotChoisi = nombreAleatoire(nombreMots); // On pioche un mot au hasard

        // On recommence à lire le fichier depuis le début. On s'arrête lorsqu'on est arrivés au bon mot
        rewind(dico);
        while (numMotChoisi > 0)
        {
            caractereLu = fgetc(dico);
            if (caractereLu == '\n')
                numMotChoisi––;
        }

        /* Le curseur du fichier est positionné au bon endroit.
        On n'a plus qu'à faire un fgets qui lira la ligne */

        fgets(motPioche‚ 100‚ dico);

        // On vire l'\n à la fin
        motPioche[strlen(motPioche)1] = '\0';

        fclose(dico);

        return 1; // Tout s'est bien passé‚ on retourne 1
    }


    long nombreAleatoire(long nombreMax)
    {
        srand(time(NULL));
        return (rand() % nombreMax);
    }


    4 j'ai fait un fichier main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>

    #include "dico.h"

    int gagne(int lettreTrouvee[]long tailleMot);
    int rechercheLettre(char lettre‚ char motSecret[]int lettreTrouvee[]);
    char lireCaractere();

    int main(int argc‚ char* argv[])
    {
        char lettre = 0; // Stocke la lettre proposée par l'utilisateur (retour du scanf)
        char motSecret[100] = {0}; // Ce sera le mot à trouver
        int *lettreTrouvee = NULL; // Un tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée‚ 1 = lettre trouvée
        long coupsRestants = 10; // Compteur de coups restants (0 = mort)
        long i = 0; // Une petite variable pour parcourir les tableaux
        long tailleMot = 0;

        printf("Bienvenue dans le Pendu !\n\n");

        if (!piocherMot(motSecret))
            exit(0);

        tailleMot = strlen(motSecret);

        lettreTrouvee = malloc(tailleMot * sizeof(int)); // On alloue dynamiquement le tableau lettreTrouvee (dont on ne connaissait pas la taille au départ)
        if (lettreTrouvee == NULL)
            exit(0);

        for (i = 0 ; i < tailleMot ; i++)
            lettreTrouvee[i] = 0;

        // On continue à jouer tant qu'il reste au moins un coup à jouer ou qu'on
        // n'a pas gagné
        while (coupsRestants > 0 && !gagne(lettreTrouvee‚ tailleMot))
        {
            printf("\n\nIl vous reste %ld coups a jouer"‚ coupsRestants);
            printf("\nQuel est le mot secret ? ");

            /* On affiche le mot secret en masquant les lettres non trouvées
            Exemple : *A**ON */

            for (i = 0 ; i < tailleMot ; i++)
            {
                if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                    printf("%c"‚ motSecret[i]); // On l'affiche
                else
                    printf("*"); // Sinon‚ on affiche une étoile pour les lettres non trouvées
            }

            printf("\nProposez une lettre : ");
            lettre = lireCaractere();

            // Si ce n'était PAS la bonne lettre
            if (!rechercheLettre(lettre‚ motSecret‚ lettreTrouvee))
            {
                coupsRestants––; // On enlève un coup au joueur
            }
        }


        if (gagne(lettreTrouvee‚ tailleMot))
            printf("\n\nGagne ! Le mot secret etait bien : %s"‚ motSecret);
        else
            printf("\n\nPerdu ! Le mot secret etait : %s"‚ motSecret);

        free(lettreTrouvee); // On libère la mémoire allouée manuellement (par malloc)
            system("PAUSE");     
            return 0;
    }


    char lireCaractere()
    {
        char caractere = 0;

        caractere = getchar(); // On lit le premier caractère
        caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

        // On lit les autres caractères mémorisés un à un jusqu'à l'\n
        while (getchar() != '\n') ;

        return caractere; // On retourne le premier caractère qu'on a lu
    }


    int gagne(int lettreTrouvee[]long tailleMot)
    {
        long i = 0;
        int joueurGagne = 1;

        for (i = 0 ; i < tailleMot ; i++)
        {
            if (lettreTrouvee[i] == 0)
                joueurGagne = 0;
        }

        return joueurGagne;
    }

    int rechercheLettre(char lettre‚ char motSecret[]int lettreTrouvee[])
    {
        long i = 0;
        int bonneLettre = 0;

        // On parcourt motSecret pour vérifier si la lettre proposée y est
        for (i = 0 ; motSecret[i] != '\0' ; i++)
        {
            if (lettre == motSecret[i]) // Si la lettre y est
            {
                bonneLettre = 1; // On mémorise que c'était une bonne lettre
                lettreTrouvee[i] = 1; // On met à 1 le case du tableau de booléens correspondant à la lettre actuelle
            }
        }

        return bonneLettre;
    }

    Après compilation ça marche pas , j'ai copié exactement le code de m@teo
    merci beaucoup
    zerotamsa
    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2006 à 23:51:26

      Et le compilateur, il dit quoi lui?
      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2006 à 23:53:36

        Si tu crées un fichier *.h, inclues tes lib dedans, ca sert a ca.
        Par exemple dans dico.h:
        #ifndef DEF_DICO
        #define DEF_DICO

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        #include <string.h>

        int piocherMot(char *motPioche);
        long nombreAleatoire(long nombreMax);

        #endif 


        Et dans dico.c , inclues uniquement dico.h

        +!NiCo!
        • Partager sur Facebook
        • Partager sur Twitter
          14 mai 2006 à 0:29:20

          salut,
          le code s'arrete dans le main.c
          int gagne(int lettreTrouvee[]‚ long tailleMot);
          code d'erreur:
          8 C:\Documents and Settings\tamsamani\Bureau\mes TP\TP c\main.c stray '\130' in program
          8 C:\Documents and Settings\tamsamani\Bureau\mes TP\TP c\main.c syntax error before "long"
          58 C:\Documents and Settings\tamsamani\Bureau\mes TP\TP c\main.c stray '\150' in program
          93 C:\Documents and Settings\tamsamani\Bureau\mes TP\TP c\main.c `tailleMot' undeclared (first use in this function)
          • Partager sur Facebook
          • Partager sur Twitter

          codes qui ne marchent pas

          × 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