Bonjour le brave peuple. Je suis en ce moment en train de butter sur le codage du deuxième programme, celui du Pendu. Dans une boucle que j'ai conçu afin de "sécuriser" un scanf, j'ai également inclus un printf transmettant mes instructions à l'utilisateur. L'intérêt de la boucle est de "piéger" l'utilisateur malicieux qui serait tenté d'indiquer un caractère dans le programme qui ne soit pas une lettre dans le but de saboter le programme jusqu'à ce qu'il indique une lettre. Le problème, c'est que lorsque j'indique un caractère non-alphabétique pour vérifier l'efficacité du système, il "print" deux fois la ligne à renvoyer. Ca fait pas propre, et ça ne me plaît pas. Ci-joint la partie du code concernée. Merci d'avance pour votre aide.
while (isalpha(lettreIndice) == 0)
{
printf("Veuillez indiquer une lettre de votre choix:\n");
scanf("%c", &lettreIndice);
}
Tu oublies le caractère de fin de ligne (Enter ou '\n'). Essaies le format "%c " avec un espace après le %c. Tu peux aussi mettre un fflush(stdin) après le scanf() pour l'effacer (flush du buffer)
Le Tout est souvent plus grand que la somme de ses parties.
Merci rouloude pour la précision. L'espace force la lecture de tout caractère dit "white space" comme Espace, Tab, Return et Enter. Return = Carriage Return = '\r' Enter = Newline = '\n'
Le Tout est souvent plus grand que la somme de ses parties.
Le seul moyen de sécuriser scanf pour l'entrée utilisateur est de ne pas l'utiliser. Cette fonction est faite pour lire une entrée correctement formattée ce qui n'est pas le cas de l'utilisateur.
Utilise fgets pour lire une ligne correctement (sans avoir à vider stdin manuellement) et analyse cette ligne.
git is great because Linus did it, mercurial is better because he didn't.
Un printf qui s'affiche deux fois
× 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.
git is great because Linus did it, mercurial is better because he didn't.