Je suis entrain de réaliser, en ce moment, le tp du pendu avec un seul mot et l'option "rejouer". La première partie tout se passe bien, mais quand je rejoue, lors du premier coup, rien ne s'affiche. Tout redevient normal à partir du second coup joué. J'ai l'impression que le pointeur que j'ai créé
char *maLettre = NULL;
ne fait pas son boulot ou qu'il n 'y a aucune valeur à l'adresse où il pointe.Je précise que je n'ai pas encore regardé la solution proposée par le site.
Je vous transmets le code:
prototypes:
#ifndef LEPENDU_H_INCLUDED
#define LEPENDU_H_INCLUDED
void initialiserMot(char mot[], int tailleTableau);
char lireCaractere();
void transformerMotSecret(char motSecret[], char mot[], char *maLettre, int tailleTableau);
void initialiserMotSecret(char motSecret[]);
int choix();
#endif // LEPENDU_H_INCLUDED
notamment le & devant maLettre. je croyais que *maLettre suffisait. D'ailleurs je ne sais pas si c'est ok d'écrire comme ça. Je n'ai pas vu cette écriture encore dans le cours. Du coup je ne suis pas sûr du pointeur créé.
Je me suis rendu compte également que j'étais obligé d'initialiser le motSecret à chaque coup. Et je n'ai pas trouvé d'autres solutions que de l'initialiser manuellement, ce qui ne m'arrange pas si je dois par la suite agrémenter de nouveaux mots.
Tu fais fausse route dès la déclaration de maLettre ! maLettre n'est pas un pointeur sur une variable de type caractère (char *), c'est juste.... un char (char maLettre).
Evidemment, certaines choses vont devoir changer dans ton programme. Par exemple, l'initialisation sera maLettre=0 et pas maLettre=NULL
- Edité par edgarjacobs 12 juillet 2018 à 19:17:52
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
L'éternel problème du \n qui est resté dans le buffer clavier.
Allons-y encore une fois
Dans choix(), tu fais un scanf("%d",...). Nickel. Mais la touche enter sur laquelle tu appuyes pour valider ton entrée n'est pas considérée par scanf(), pour un format %d, comme un caractère valide. Le nombre qui précède le enter, ok, mais le enter en lui-même est refusé. Mais il n'est pas perdu pour autant, il reste dans le buffer du clavier, prêt à être lu. Et quand tu atteins le getchar() de lireCaractere(), il est lu. La suite, tu l'as comprise.
Pour éviter ça, il faut vider le buffer clavier après le scanf("%d",....). Plein de code à trouver sur le site, mais vite fait sur le gaz
void flushKeyboardBuffer(void) {
int c;
while((c=getchar())!='\n' && c!=EOF);
}
- Edité par edgarjacobs 12 juillet 2018 à 22:31:58
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
× 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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent