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é?
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.
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.
@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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
@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.
Le Tout est souvent plus grand que la somme de ses parties.
@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
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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.