Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme pour le pendu

toujours lui

    18 août 2006 à 9:06:21

    bonjour à tous, je viens d'arriver au deuxième TP celui du Pendu! :D
    Je croyais qu'il ne devait pas etre très difficile mais je me suis trompé ^^
    Alors venons-en à mon problème :

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

    int main ( int argc, char** argv )
    {
        char motSecret[7] = "MARRON";
        char maLettre[] = {0};
        long nombreDeCoups = 10, i = 0;
        char caractere = 0;
        int compareCaractere = 0;
       
        printf("Bienvenue dans le Pendu !");
        printf("\\n\\nIl vous reste %ld coups a jouer\\n", nombreDeCoups);
        printf("Quel est le mot secret ? ******\\n");
        printf("Proposez une lettre : ");
        caractere = lireCaractere();
        compareCaractere = comparer(const char* caractere, *motSecret); // Ca plante ici "syntax error before const"
       
        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 (pour les effacer)
        while (getchar() != '\\n') ;

        return caractere; // On retourne le premier caractère qu'on a lu
    }
                 
    int comparer(const char* caractere, const char* motSecret)
    {
        int compareCaractere = 0;
       
        if (strcmp(caractere, motSecret[]) == 0) // Si strcmp renvoie 0 (chaînes identiques)
             printf("Ce caractere se trouve bien dans le mot secret\\n");
       
        else
             printf("Ce caractere ne se trouve pas dans le mot secret\\n");
                       
        return compareCaractere;
    }   

    Voilà mon code.

    Je ne vois pas pourquoi il me mets ça.
    Merci à ceuw qui me répondront :)

    PS : Est ce que je suis sur la bonne voie pour le code du pendu?? :-°
    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2006 à 9:34:33

      Ca te met ça parceque dans l'appel de la fonction il ne faut pas indiquer le type de ton paramètre:
      compareCaractere = comparer(caractere, motSecret);

      edit: tu es sur la bonne voie mais il y a d'autres erreurs, je te laisse chercher
      • Partager sur Facebook
      • Partager sur Twitter
        18 août 2006 à 9:53:11

        j'ai fais ce que tu m'a dit mais il me disent ça :
        [Warning] passing arg 1 of `comparer' makes pointer from integer without a cast
        • Partager sur Facebook
        • Partager sur Twitter
          18 août 2006 à 10:00:02

          Les parametres que tu passes à ta fonction comme etant des pointeurs ne sont pas déclarés en tant que pointeurs.
          • Partager sur Facebook
          • Partager sur Twitter
            18 août 2006 à 10:12:00

            Ta facon de raisonner est fausse, celà ne peut pas marcher avec un strcmp. En effet, ta fonction demande un const char * en premier paramètre. Or, toi, tu lui envoies un char. Il faut donc que ta fonction attende un char en premier paramètre, et dans ta fonction, il faut que tu fasses une boule pour savoir si le caractère est dans le mot secret.
            • Partager sur Facebook
            • Partager sur Twitter
              18 août 2006 à 11:15:06

              excusez moi mais je n'ai pas très bien compris pour ma fonction strcmp il faut que je lui envoi un pointeur? :euh:
              • Partager sur Facebook
              • Partager sur Twitter
                18 août 2006 à 11:18:33

                strcmp est censé comparer deux chaînes. Or la tu compares un caractère avec le chaîne. Celà ne peux pas marcher. Admettons que l'utilisteur entre la lettre 'P' et que le mot secret est "MARRON". Dans ta fonction, tu vas comparer 'P' et "MARRON". Il y a un truc qui cloche. Donc, sois tu utilises un strchr pour voir si la lettre est dans le mot, sois tu fais une boucle qui parcourt le mot entier pour vérifier si la lettre est dans le mot. Tu comprends un peu mieux ?
                • Partager sur Facebook
                • Partager sur Twitter
                  18 août 2006 à 11:20:15

                  a ca y est j'ai compris pour ma fonction ;)
                  Par contre comment je peux faire pour l'appel de ma fonction?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 août 2006 à 11:21:14

                    ben tu utilises le prototype int comparer(char caractere, const char *motSecret);

                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 août 2006 à 12:29:09

                      bon alors j'ai rectifié mon code :

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

                      int main ( int argc, char** argv )
                      {
                          char motSecret[7] = "MARRON";
                          char maLettre[] = {0};
                          long nombreDeCoups = 10, i = 0;
                          char caractere = 0;
                          int compareCaractere = 0;
                          char *suiteChaine = NULL;
                         
                          printf("Bienvenue dans le Pendu !");
                          printf("\\n\\nIl vous reste %ld coups a jouer\\n", nombreDeCoups);
                          printf("Quel est le mot secret ? ******\\n");
                          printf("Proposez une lettre : ");
                          caractere = lireCaractere();
                          *suiteChaine = chercher(caractere, motSecret);
                         
                          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 (pour les effacer)
                          while (getchar() != '\\n') ;

                          return caractere; // On retourne le premier caractère qu'on a lu
                      }
                                   
                      int chercher(char caractere, char motSecret)
                      {
                          char *suiteChaine = NULL;
                         
                          suiteChaine = strchr(motSecret, caractere);
                          if (suiteChaine != NULL) // Si on a trouvé quelque chose
                          {
                              printf("%c", motSecret);
                          }
                          return suiteChaine;
                      }

                      J'ai utilisé la fonction strchr mais mon programme se ferme dès que j'entre une lettre
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 août 2006 à 12:30:39

                        Bah regarde tes types. Ta fonction est censée retourner un int et tu retournes un char *
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 août 2006 à 12:36:29


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

                          int main ( int argc, char** argv )
                          {
                              char motSecret[7] = "MARRON";
                              char maLettre[] = {0};
                              long nombreDeCoups = 10, i = 0;
                              char caractere = 0;
                              int *suiteChaine = NULL;
                             
                              printf("Bienvenue dans le Pendu !");
                             
                              do
                              {
                                 printf("\\n\\nIl vous reste %ld coups a jouer\\n", nombreDeCoups);
                                 printf("Quel est le mot secret ? ******\\n");
                                 printf("Proposez une lettre : ");
                                 caractere = lireCaractere();
                                 *suiteChaine = chercher(caractere, motSecret);
                              }while (nombreDeCoups != 0 or ); // ou alors on trouve le mot   
                             
                              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 (pour les effacer)
                              while (getchar() != '\\n') ;

                              return caractere; // On retourne le premier caractère qu'on a lu
                          }
                                       
                          int chercher(char caractere, char motSecret)
                          {
                              int *suiteChaine = NULL;
                             
                              suiteChaine = strchr(motSecret, caractere);
                              if (suiteChaine != NULL) // Si on a trouvé quelque chose
                              {
                                  printf("%c", motSecret);
                              }
                              return suiteChaine;
                          }

                          et voilà j'ai rajouté aussi une boucle do while car je crois que mateo utilise une boucle.
                          C'est bon jusque là?
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Probleme pour 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