Je suis bloqué sur la fonction lireCaractère, mon programme ne lit pas la première lettre que je propose quoi qu'il arrive mais il le fait correctement les fois suivantes, je ne comprends pas pourquoi...
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include "LePendu.h"
#include <string.h>
char lireCaractere();
int main(int argc, char const *argv[])
{
char motSecret[] = {"MARRON"};
int LongeurMotSecret = strlen(motSecret);
int difficulté = 0;
char* motRévélé = NULL;
char LettreProposée = 0;
motRévélé = malloc(LongeurMotSecret * sizeof(char));
hide(motRévélé, LongeurMotSecret);
printf("Bienvenue dans le Pendu !\n"); //bienvenue
printf("Choisissez le nombre d'essais\n");
scanf("%d", &difficulté);
while ( difficulté > 0 ) //boucle principale
{
printf("Il vous reste %d coups à jouer !\n", difficulté);
printf("Quel est le mot secret ? %s\n", motRévélé);
printf("Proposez une lettre : ");
LettreProposée = lireCaractere();
for (int i = 0; i < LongeurMotSecret; ++i)
{
if (motSecret[i] == LettreProposée)
{
motRévélé[i] = LettreProposée;
}
}
difficulté--;
}
return 0;
}
char lireCaractere()
{
char caractere = 0;
caractere = getchar();
caractere = toupper(caractere);
while(getchar() != '\n') ;
return caractere;
}
Après avoir lu la difficulté, tu peux faire: fflush(stdin); // flush le flot d'entrée. Pour le malloc: + tu dois réserver un espace supplémentaire pour le '\0' (tu dois en tenir compte dans hide() ) + sizeof(char) est inutile car il vaut toujours 1 Dans la fonction lireCaractere: char caractere = 0; caractere = getchar(); Inutile d'initialiser ici, tu assignes juste après: char caractere = getchar();
Le Tout est souvent plus grand que la somme de ses parties.
Merci beaucoup ! Ca fonctionne comme il faut maintenant, je ne comprends pas pourquoi je n'ai pas rencontré ce problème avec mes précédents scanf() par contre ? est-ce que vous pourriez m'expliquer rapidement cette histoire de flush de buffer et quand faut-il l'utiliser ? Merci encore !
Quand on passe du scanf au getchar() ou autres fonctions du genre, on risque d'avoir ce genre de problème. Si on reste avec des scanf, on peut s'en tirer en mettant un espace au début du scanf suivant. Le "buffer" est la zone mémoire où sont accumulés les caractères lus du terminal. Le fflush efface ce qui se trouve dans cet espace. Ici, c'était le Enter ou '\n'
Le Tout est souvent plus grand que la somme de ses parties.
TP "Le Pendu" cours langage C ( Mathieu Nebra )
× 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.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.