Partage
  • Partager sur Facebook
  • Partager sur Twitter

Partie 2-Chapitre 9 (Pendu)

Sujet résolu
    8 août 2006 à 16:36:30

    Bonjour

    C'est étrangem je suis en train de faire le pendu, le résultat de mon code répète toujous deux fois d'entrer une lettre, le deuxième fois il semble entrer lui même quelque chose d'invisible. o_O Le code est juste ici si vous avez le coeur à y jeter un coup d'oeuil.

    MAIN:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "checkletter.h"
    #include <ctype.h>


    int main(int argc, char *argv[])
    {
     
       
      //------------------------DECLARATRION DES VARIABLES-------------------
      char motCache[] = "ORANGE";
      char motTrouve[] = "******";
      char lettre = 'a';
      long coups = 10;
      long *pcoups = &coups;
     
     
     
      //------------------------DEBUT DE BOUCLE------------------------------
      do
      {
     
         printf("Trouvez le mot cache: %s\n",motTrouve);
         printf("Essaie une lettre: ");
         scanf("%c",&lettre);
         lettre = toupper(lettre);
         checkletter(motCache,motTrouve,lettre,pcoups);//FONCTION CHECKLETTER
         printf("\nIl vous reste %ld coups!",coups);
         printf("\n\n");
     
     //------------------------FIN DE BOUCLE---------------------------------
      }  while(strcmp(motCache,motTrouve) == 1);
     
      printf("Le mot mystere est bien: %s\n\n",motCache);
     
      system("PAUSE");     
      return 0;
    }


    FONCTION CHECKLETTER:

    #include<string.h>

    void checkletter(char chaine1[],char chaine2[],char lettre,long *coups)
    {
    long i;
    long size = strlen(chaine1);

     for(i = 0; i < size; i++)
     {
        if (chaine1[i] == lettre)
        {
            chaine2[i] = lettre;       
        }
        else   
        {
            chaine2[i] = chaine2[i];
            coups = coups - 1;
        }
     }
       
    }


    P.S: Oui je sais, le compteur ne fonctionne pas encore, c'est sûrement un léger problem de pointeur ça!

    Merci d'avance! Ne vous gêner pas de me demander de l'aide à l'avenir! :D
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2006 à 16:44:39

      Salut.

      Mes observations : Il y a des règles à respecter sur ce forum, et une règles essentielle qui est de mettre les balises <code> pour améliorer la lisibilité du code
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2006 à 16:57:47

        Oups! Désoler, quoi que...je trouve pas les balises?
        • Partager sur Facebook
        • Partager sur Twitter
          8 août 2006 à 16:59:41

          Je ne te crois pas. Ce topic explique explicitement les règles
          • Partager sur Facebook
          • Partager sur Twitter
            8 août 2006 à 17:07:23

            Ce qui est vrai c'est que je ne savais pas comment le mettre, et ce qui et vrai est que l'aide du site est bien fait!
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2006 à 20:06:44

              Citation : olfactus

              #include checkletter //Déclaration de la fonction checkletter


              Non, non et non ! Pas de définition de fonction dans un fichier d'en-tête. Juste le prototype. Revoir le chapitre sur la programmation modulaire.

              Ensuite pour le problème de saisie c'est un sujet récurrent sur le forum, il s'agit d'un '\n' qui traîne dans le buffer d'entrée. Solution proposée : utiliser fgets(s, 1, stdin), getchar() ou fgetc() à la place de scanf de manière générale et surtout ne pas oublier de vider le buffer.

              Rappel : pour vider le buffer :

              while (getchar() != '\n')
                  ;


              Peut être implémenté sous forme de macro (ou fonction éventuellement) :

              #define cleanbuf while (getchar() != '\n') /
                                   ;


              ++.
              • Partager sur Facebook
              • Partager sur Twitter
                8 août 2006 à 20:18:43

                Merci je vais tester ça! Mais, si j'ai bien compris il me faut absolument un fichier externe qui stoke ma variable! Pas moyen de dire à la console lit juste le caractère pas le signe "\n". Je croyais qu'il y avait juste les chaînes de caractère qui avait ce symbol invissible, pas les déclaration de simple caractère comme celle-là char lettre = 'C'; ? C'est étrange, faut t-il vraiment être aubliger de créer un fichier externe. Même si on n'a besoin d'un pour le dictionnaire! :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  8 août 2006 à 20:23:35

                  Citation : mleg


                  Rappel : pour vider le buffer :

                  Code : C
                  while (getchar() != '\n')
                  ;




                  T'es sur que ça va virer le '\n' de la chaine ?


                  static void clean(const char *buffer, FILE *fp)
                  {
                      char *p = strchr(buffer,'\n');
                      if (p != NULL)
                      {
                          *p = 0;
                      }
                      else
                      {
                          int c;
                          while ((c = fgetc(fp)) != '\n' && c != EOF)
                          {
                          }
                      }
                  }
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 août 2006 à 20:35:49

                    Merci de vos réponse..je vais m'amuser un peu avec ça, j'ai de la misère avec l'affaire de vidage, mais après un peux de pratique je devrais l'avoir compris!...............sa commence déjà à rentrer, l'utilisation des pointeurs va me permettre d'aller enlever le \0 de la variable une fois tapée..si je ne me trompe pas!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 août 2006 à 20:48:38

                      Citation : Octal

                      Citation : mleg


                      Rappel : pour vider le buffer :

                      Code : C
                      while (getchar() != '\n')
                      ;



                      T'es sur que ça va virer le '\n' de la chaine ?



                      Non, je suis sûr que ça ne le fera pas. C'est pas le but :

                      Citation : olfactus

                      scanf("%c", &lettre);


                      ;)

                      Citation : olfactus

                      l'utilisation des pointeurs va me permettre d'aller enlever le \0 de la variable une fois tapée...



                      Je ne vois pas vraiment l'interêt... :euh:
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 août 2006 à 20:57:43

                        Cette fonction me semble correct (onteusement pompé sur le tuto :-° )
                        Mais je ne sais pas comment y mettre la lettre que je rentre au clavier?
                        Oui, bein sur caractere = getchar() mais getchar est éguale à quoi?

                        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
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 août 2006 à 21:00:28

                          char c;

                          c = lireCaractere();
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 août 2006 à 21:06:46

                            Excellent sa marche! Merci, maintenant reste plus qu'à matttaquer au problem du compteur défectueux et fini la merde! P.S: La fonction getchar? Vous avez trouvez ça où? Appart bien sur dans la présentation du TP je me souviens pu qu'elle chapitre ont la vu pi j'ai beau fouiller dans mes notes je ne l'a vois pas o_O .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 août 2006 à 21:08:34

                              Citation : mleg


                              Non, je suis sûr que ça ne le fera pas. C'est pas le but :

                              Citation : olfactus
                              Code : C
                              scanf("%c", &lettre);


                              ;)



                              -> I agree, la fonction fournie (fonction de -ed-) avait pour but d'enlever le '\n' d'une chaine saisie avec fgets vu que tu en a fais allusion tout à l'heure.
                              ;)

                              Citation : olfactus


                              l'utilisation des pointeurs va me permettre d'aller enlever le \0 de la variable une fois tapée..si je ne me trompe pas!



                              -> :o euh '\0' marque la fin de chaîne, sans celà, normalement elle n'est pas valide, pourquoi vouloir l'enlever ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 août 2006 à 21:29:20

                                Tout fonctionne à merveille! Avant de clore le sujtet je préfère attendre d'avoir feni le dictionnaire :-° .
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 août 2006 à 11:31:11

                                  Citation : olfactus

                                  P.S: La fonction getchar? Vous avez trouvez ça où? Appart bien sur dans la présentation du TP je me souviens pu qu'elle chapitre ont la vu pi j'ai beau fouiller dans mes notes je ne l'a vois pas o_O .



                                  Il n'y a pas que les cours de M@téo, bien que très pédagogiques et astucieusement rédigés, dans la vie ;)

                                  La fonction getchar() est une des plus utilisées par les programmeurs, elle apparaît donc un peu partout...
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Partie 2-Chapitre 9 (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