Partage
  • Partager sur Facebook
  • Partager sur Twitter

jeu du pendu probleme

Sujet résolu
    21 juin 2020 à 16:58:38

    Bonjour,

    je suis débutant en C et je suis le cours de Mathieu Nebra et je suis bloqué depuis deux jours sur une fonction du jeu du pendu.

    J'ai décidé de faire des fonctions pour chaque étapes du jeu(une fonction pour récupérer la lettre entrée par l'utilisateur,une autre pour vérifier si la lettre tapée par l'utilisateur correspond bien à une lettre du mot mystère,...ect)

    Je suis bloqué sur la fonction qui vérifie la lettre entrée par l'utilisateur et la compare au mot mystère, elle marche une seule fois

    ====Bienvenu dans le jeu du pendu====
    
    Nombre de coups restant: 10
    mot secret:└*****
    entre une lettre:


    puis la deuxième fois que le programme appel cette fonction, il s'arrête et retourne une valeur négative dont je ne comprends pas la provenance.

    entre une lettre:sdqgf
    Nombre de coups restant: 9
    mot secret:
    Process returned -1073740940 (0xC0000374)   execution time : 32.398 s
    Press any key to continue.

    Quelqu'un pourrait m'expliquer la nature de le valeur que le programme a retourné?

    voici ma fonction

    char *comparaisoncaractere(char* motmystere,char lettreentree)
    {
     char *returnmotmystere=NULL;
     returnmotmystere=malloc(sizeof(motmystere));
     int i=0;
     do
     {
      i++;
      if(motmystere[i]==lettreentree)
        {
          returnmotmystere[i]=lettreentree;
        }
      else
        {
          returnmotmystere[i]='*';
        }
    
      }
     while(motmystere[i]!='\n');
     return returnmotmystere;
     free(returnmotmystere);
    }

    pour récupérer le return, j'utilise un pointeur 

    char* comparaisonrecuperer=NULL;
          comparaisonrecuperer= comparaisoncaractere(motmystere,lettreentree);
          printf("%s",comparaisonrecuperer);



    Pour l'instant, il y a un seul mot mystère présent dans le code sous forme d'une chaine de caractères

    char motmystere[]="MARRON";

    je compte gérer ça avec un fichier texte une fois que toutes les fonctions du jeu marcheront correctement. 

    Pouvez-vous m'aider svp?

    -
    Edité par XxCommandoSniperxX 21 juin 2020 à 17:36:34

    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2020 à 17:39:46

      Il y a beaucoup de chose qui ne vont pas !

      1) Dans la fonction quand tu fais sizeof(motmystere) ça te donne la taille d'un pointeur et non pas la taille du tableau. (Les tableaux sont passé par adresse aux fonctions).

      2) Tu fait un free(returnmotmystere); il ne sera jamais exécuté. L'instruction return met fin à la fonction, tout ce qui est à la suite du return n'est pas exécuté !

      3) Et de toute façon, ce n'est pas une bonne idée de libérer la mémoire, car l'adresse que tu retournes pointera sur une zone invalide.

      Conclusion : La solution d'allouer une chaîne pour retourner le résultat, n'est probablement pas une bonne idées. Le mieux serait de passer les deux chaînes à la fonction, celle contenant le mot et celle contenant les étoiles, cette dernière étant rempli au fur et à mesure des lettre trouvées. 

      • Partager sur Facebook
      • Partager sur Twitter
        21 juin 2020 à 17:50:39

        Je te remercie,

        l'idée d'allouer, c'était pour que la fonction n'utilise pas trop ou pas assez de mémoire et s'adapte à n'importe quel mot mystère, peu importe sa taille.

        Mais je ne savais pas que la fonction s'arrête au return et en effet c'est une mauvaise idée car même si j'aurais libérer la mémoire avant le return, tout ce qui se trouve dans returnmemoire s'effacera avant que la fonction ne renvoi sa valeur.

        Merci pour ton alternative.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 juin 2020 à 21:07:22

          attention à ça ! tu n'as qu'une seul variable déclarer comme char*, il faut mettre des "," pas des ";" si tu veux déclarer à la chaine

          XxCommandoSniperxX a écrit:

          pour récupérer le return, j'utilise un pointeur 

          char* comparaisonrecuperer=NULL;
                comparaisonrecuperer= comparaisoncaractere(motmystere,lettreentree);
                printf("%s",comparaisonrecuperer);
          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2020 à 22:53:47

            BrigitteLPB a écrit:

            attention à ça ! tu n'as qu'une seul variable déclarer comme char*, il faut mettre des "," pas des ";" si tu veux déclarer à la chaine

            XxCommandoSniperxX a écrit:

            pour récupérer le return, j'utilise un pointeur 

            char* comparaisonrecuperer=NULL;
                  comparaisonrecuperer= comparaisoncaractere(motmystere,lettreentree);
                  printf("%s",comparaisonrecuperer);


            @BrigitteLPB: heu, la ligne 1 déclare (et initialise, ce qui n'est pas nécessaire), la ligne 2 assigne, la ligne 3 affiche. Où est le problème ? Ce n'est pas parce que tout est aligné que tout est déclaration.

            -
            Edité par edgarjacobs 22 juin 2020 à 22:57:54

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              23 juin 2020 à 1:07:19

              edgarjacobs a écrit:

              BrigitteLPB a écrit:

              attention à ça ! tu n'as qu'une seul variable déclarer comme char*, il faut mettre des "," pas des ";" si tu veux déclarer à la chaine

              XxCommandoSniperxX a écrit:

              pour récupérer le return, j'utilise un pointeur 

              char* comparaisonrecuperer=NULL;
                    comparaisonrecuperer= comparaisoncaractere(motmystere,lettreentree);
                    printf("%s",comparaisonrecuperer);


              @BrigitteLPB: heu, la ligne 1 déclare (et initialise, ce qui n'est pas nécessaire), la ligne 2 assigne, la ligne 3 affiche. Où est le problème ? Ce n'est pas parce que tout est aligné que tout est déclaration.

              -
              Edité par edgarjacobs il y a environ 1 heure

              Déclarer, assigner, afficher: veni, vidi, vici. :)
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

              Anonyme
                23 juin 2020 à 9:59:14

                edgarjacobs a écrit:

                BrigitteLPB a écrit:

                attention à ça ! tu n'as qu'une seul variable déclarer comme char*, il faut mettre des "," pas des ";" si tu veux déclarer à la chaine

                XxCommandoSniperxX a écrit:

                pour récupérer le return, j'utilise un pointeur 

                char* comparaisonrecuperer=NULL;
                      comparaisonrecuperer= comparaisoncaractere(motmystere,lettreentree);
                      printf("%s",comparaisonrecuperer);


                @BrigitteLPB: heu, la ligne 1 déclare (et initialise, ce qui n'est pas nécessaire), la ligne 2 assigne, la ligne 3 affiche. Où est le problème ? Ce n'est pas parce que tout est aligné que tout est déclaration


                AH ! Bon bah j'ai rien lel j'ai pas fait gaffe au nom des variables ^^' pour moi ce genre de chose ne sont jamais avec les déclarations de variables
                • Partager sur Facebook
                • Partager sur Twitter

                jeu du pendu probleme

                × 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