Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probléme avec strcat

il en met plus que ce que je veux

    10 juin 2006 à 18:53:26

    Bonjour tout le monde les gens :o)
    Lors du TP 'le pendu' il m'arrive un drole de probleme.
    Quand le programme doit dire les lettres fausses que le joueur a dit, le programme dit au passage le mot mystere o.O'

    J'ai fait une capture d'écran de la console :
    Image utilisateur

    Voici mon code (Le programme est loin d'être fini) :
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>

    #include "main.h" //la il y a le prototype ainsi que la fonction lireCaractere() .

    int main(int argc, char *argv[])
    {
      char motMystere[10] = "TENNIS", lettre = 0, lettreTrouve[52] = { }, lettrePasBonne[52] = { } ;
      int essaiRestant = 10, motTrouve = 0 ;
     
      printf("Bienvenue dans le jeu du pendu\n\n\n") ;
     
      while (motTrouve == 0) {
          if (essaiRestant == 0) {
                           printf("Vous avez perdu, le mot mystere etait : %s\n", motMystere) ;
                           motTrouve = 1 ;
          }
          else {
               if (essaiRestant == 1) { printf("Il vous reste 1 essai\n") ; }
               else { printf("Il vous reste %ld essais\n", essaiRestant) ; }
               printf("les mauvaises lettres que vous avez dites : %s\n", lettrePasBonne) ;
               printf("Choisissez une lettre : ") ;
               lettre = lireCaractere() ;
               if (strchr("TENNIS", lettre) == NULL) {
                                    printf("La lettre tappee n'est pas dans le mot mystere !\n\n\n") ;
                                    essaiRestant-- ;
                                    strcat(&lettrePasBonne, &lettre) ;
               }
               else {
                    printf("La lettre tappee est effectivement dans le mot mystere !\n\n\n") ;
                    strcat(&lettreTrouve, &lettre) ;
               }
          }
      }
     
      system("PAUSE");     
      return 0;
    }


    Je pense que l'erreur vien du fait qu'il y ai pas le fameux caractére \0 a la fin de ma variable lettre suite à la fonction lireCaractere.
    j'ai essayé de faire strcat(&lettre, '\0') mais le programme ferme tout seul ^^'

    Comment faire ? ^^'
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      10 juin 2006 à 19:03:24

      strcat(&lettrePasBonne, &lettre) ;

      Tout d'abord, avec strcat, on ne met pas de & devant un tableau.
      De plus, en second argument, on doit lui donner un tableau et non une variable.
      Et c'est la même chose pour la seconde concaténation.

      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2006 à 21:25:00

        Ioups oui en effet ^^'

        Jvoi mal comment faire... Il faut que je stocke lettre dans un tableau ?
        Si je fais une variable char lettreuh[10] = { }
        Et plus loin dans le code je met lettre dans ce tableau avec strcpy(lettreuh, &lettre). Je rectifie plus loin le strcat (qui est alors strcat(lettrePasBonne, lettreuh)), c'est exactement pareil :x

        (heu on me comprend comme ca ? je voudrais pas remettre le code :p )
        • Partager sur Facebook
        • Partager sur Twitter
          10 juin 2006 à 21:37:57

          C'est surtout il me semble que strcat() retourne le résultat, et ne modifie pas son paramètre... à vérifier...
          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2006 à 21:49:32

            Citation : remram44

            C'est surtout il me semble que strcat() retourne le résultat, et ne modifie pas son paramètre... à vérifier...


            Quel paramètre ? Il y en a 2...
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              10 juin 2006 à 21:51:15

              J'ai été vérifier sur le tutos, il modifie bien le 1er paramétre
              Puis vu le prototype char* strcat(char* chaine1, const char* chaine2); il y a pas de const sur le 1er paramétre donc il change :s
              • Partager sur Facebook
              • Partager sur Twitter
                12 juin 2006 à 20:30:35

                Bon personne à l'air de savoir comment faire lol, j'ai réussi à me faire une pitite fonction pour virer ce qu'il y a en trop, merci quand même :p
                • Partager sur Facebook
                • Partager sur Twitter
                  12 juin 2006 à 20:45:40

                  -ed- > Exact, c'est ça quand on regarde pas le man. C'est un peu bizarre, mais la première chaine est bien modifiée, et le premier paramètre est retourné (vraiment bizarre).

                  C'est vraiment utile de faire une fonction qui retourne directement l'un de ses paramètres ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juin 2006 à 21:58:51

                    Citation : Knacky

                    #include "main.h" //la il y a le prototype ainsi que la fonction lireCaractere().


                    Tiens, étrange que -ed- n'ai pas fait la remarque :p

                    Pas de code dans un fichier d'en-tête, uniquement les defines, les prototypes et éventuellement les structures, énumérations, unions etc.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juin 2006 à 9:39:24

                      Citation : remram44

                      -ed- > Exact, c'est ça quand on regarde pas le man. C'est un peu bizarre, mais la première chaine est bien modifiée, et le premier paramètre est retourné (vraiment bizarre).

                      C'est vraiment utile de faire une fonction qui retourne directement l'un de ses paramètres ?



                      Tu peux utiliser strcat sans récuperer ce qu'elle renvoit (ie la chaine1 modifiée). Ceci dit, le fait qu'elle renvoit quelque chose te permet de l'utiliser de bien des façons... par exemple :


                      if(strcmp(strcat(chaine1,chaine2),chaine3)==0){
                      /* Si la chaine1+2 equivaut à chaine 3 alors... */
                      }
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 juin 2006 à 21:01:25

                        Citation : mleg

                        Pas de code dans un fichier d'en-tête, uniquement les defines, les prototypes et éventuellement les structures, énumérations, unions etc.



                        Heu ben ça fonctionne quand même.
                        Et pourquoi on pourrait pas en mettre ? le compilateur rassemble tous les fichiers (les .h vont dans les .c pour en faire un .o) donc si une fonction est écrite dans le .h ou .c c'est pareil non ?

                        ça serait mieux facile pour se repérer.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juin 2006 à 21:35:42

                          Citation : Knacky

                          Citation : mleg

                          Pas de code dans un fichier d'en-tête, uniquement les defines, les prototypes et éventuellement les structures, énumérations, unions etc.



                          Heu ben ça fonctionne quand même.


                          La question n'est pas là (et si il y avait d'autres fichiers, ça ne fonctionnerait plus : définitions multiples etc.)

                          C'est une question de gestion et d'organisation du code.

                          http://mapage.noos.fr/emdel/codage.htm

                          Il faut maitriser ça si on veut faire de gros projets (dans l'industrine, 1 million de lignes est une bonne moyenne).
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !

                          Probléme avec strcat

                          × 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