Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP pendu : veut pas s'arreter

probleme probleme....

    11 mai 2006 à 17:03:00

    Bonjour a tous :)

    J'ai regarde un petit peu les post sur le tp du pendu mais je ne crois pas avoir vu mon probleme donc je me permets de demander une aide ici :D
    Je precise avant , je n'ai fais pour l'instant que la 1ere partie du TP ,c-a-d sans le dictionnaire.... ^^

    Le probleme est :
    -si je trouve le mot avant 10 coups , tout va bien le jeu s'arrete en affichant mon mot...
    -mais si je ne trouve pas le mot avant 10 coups , mon jeu continue et le compteur passe en negatif .. :(
    et si je met

    while(strcmp(motSecret,motCache) != 0 || nombreDeCoups>0)

    Le jeu continue meme si j'ai trouve le mot.... :colere2:
    Mon code peut paraitre un peu moins... "optimisé " par rapport a mateo mais je pense rarement a utiliser les booleennes .. :-°
    Sinon il y a deja quelques bouts de codes qui permettront de faire fonctionner le dico :)

    Voici mon code :

    #include <stdio.h>
    #include <stdlib.h>
    #include "brouillon.h"
    #include <ctype.h>
    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 (pour les effacer)
        while (getchar() != '\n') ;

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

    char devoilerMot(char motSecret[],char motCache[],char* lettreTrouvee)
    {
        long i;
        for(i=0 ; motSecret[i] != lettreTrouvee ; i++);
        motCache[i] = motSecret[i];
        /* je n'ai pas reflechis a la possibilité de double lettre...
        dites le si vous voyer une solution adaptée :)
        */

        return motCache;
    }

    char ecrireMotCache(long longueurChaine , char motCache[])
    {
        long i;
       
        for(i = 0 ; i < longueurChaine ; i++)
        {
            motCache[i] = '*';
        }
            return motCache;
    }
    int main()
    {
        char motSecret[]="SALUT";
        char maLettre= 0;
        char* motCache= NULL;
        char lettreTrouvee = 0;
        long longueurChaine = 0,nombreDeCoups = 10;
        longueurChaine = strlen(motSecret) ;
        motCache = malloc(longueurChaine * sizeof(char));
        ecrireMotCache(longueurChaine,motCache);
       while ( strcmp(motSecret,motCache) != 0 )// je n'ai pas mis (...) || nombreDeCoups > 0 ...essayer ca ne marche pas
        {

           printf("Il vous reste %ld coups !\n",nombreDeCoups);

           printf("Quel est le mot ? %s \n",motCache);
           printf("Proposez une lettre ! ");
           maLettre = lireCaractere();
           printf("\n\n");
           printf(" 1) maLettre vaut %c\n ",maLettre);


              if (strchr(motSecret,maLettre) != NULL )//si la lettre est ds le mot
                {
                if(strcmp(motSecret,motCache) != 0)//la lettre tape ne finit pas le mot
                 {
             lettreTrouvee = *strchr(motSecret,maLettre);
                                      devoilerMot(motSecret,motCache,lettreTrouvee);//devoile la lettre
                  printf("2) motCache vaut  %s \n\n",motCache);
                  nombreDeCoups--;
                  }
              }
          else // si la lettre tape n'est pas dans le mot
              {
              printf("il n'y a pas de caractere identique");
              nombreDeCoups--;
              }


        }
        printf("Vous avez trouver le mot !");//la lettre tape complete le mot entierement
        return 0;
    }


    Voila voila ;)
    Bien je vous remercie d'avance et puis
    Mateo (et les autes BIEN SUR :p ) continuez comme ca vous etes geniaux :)

    ++
    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2006 à 17:43:36

      Citation : Roi des Renards

      -mais si je ne trouve pas le mot avant 10 coups , mon jeu continue et le compteur passe en negatif .. :(



      Salut !

      Dans le main, tu as mis une boucle pour que le joueur puisse essayer plusieurs lettres tant qu'il n'a pas trouvé le mot, non ? ;)
      Alors vois si tu n'a pas oublié le compteur de coups :
      while(coupsRestants > 0 && !gagne(lettreTrouvee))
      {

      }


      C'est peut-être ça qui empêche ton jeu d'arrêter et qui fait aller ton compteur dans le négatif. :)

      Voilà, bon courage.
      • Partager sur Facebook
      • Partager sur Twitter
        11 mai 2006 à 20:43:58

        euhh...

        la fonction gagne appartient au code de mateo avec les booleennes :p
        Moi, je n'ai pas de fonction gagne...
        merci quand meme ^^
        Quelqu'un aurait une solution adaptée a mon probleme..? ^^
        ++
        • Partager sur Facebook
        • Partager sur Twitter
          11 mai 2006 à 20:50:09

          Facile ton problème !
          Regarde bien ce que tu as mis :
          while(strcmp(motSecret,motCache) != 0 || nombreDeCoups>0)

          alors là la boucle continue tant que motSecret est différent de motCache OU tant que nombreDeCoups est supérieur à 0. Donc si tu trouves le mot la première condition n'est plus remplie mais la seconde l'est encore donc ça continue ;)
          Il faut que tu mettes :
          while(strcmp(motSecret,motCache) != 0 && nombreDeCoups>0)


          Dsl si c'est ce que tu voulais dire Kandar7 !
          • Partager sur Facebook
          • Partager sur Twitter
            12 mai 2006 à 22:27:52

            ahh...
            euhhh , maintenant ca ne marche plus si je trouve le mot avant 10 coups :p
            merci quand meme ... :D

            ++
            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2006 à 16:52:26

              N'y auraut il pas quelqu'un d'autre
              qui sache la raison de ce probleme:p?
              bon ...
              ++ :)
              • Partager sur Facebook
              • Partager sur Twitter

              TP pendu : veut pas s'arreter

              × 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