Tout en boucle ignore scanf la deuxième fois
#include <stdio.h>
int main ()
{
char loop='y';
while(loop != 'n') {
printf("loop? ");
scanf("%c", &loop);
if(loop != 'y') {
loop='n';
}
}
return 0;
}
Si je tape " y " il redémarrage en boucle, mais ignore la scanf la deuxième fois et à la fin de la boucle après que. Quelqu'un peut-il aider?
- Découvrez cet article: gidnetwork.com/b-60.html
- double possible de Deuxième scanf ne fonctionne pas
- double possible de Scanf ignore tous les autres boucle while en C
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que le
scanf
rejette le retour à la ligne. Modifier:scanf
ignorer tous les espaces (y compris les retours à la ligne).Vous avez probablement eu à entrer une nouvelle ligne donc l'entrée passe à votre programme, à droite? La deuxième fois que la boucle s'exécute, il lit que le caractère de saut de ligne, qui était "en attente" pour être lu et quitte automatiquement la boucle (
'\n' != 'y'
). Vous pouvez faire scanf ignorer les espaces blancs à l'aide de ce format de chaîne de caractères à la place:Une solution pourrait être l'utilisation
fflush(stdin)
après lascanf()
déclaration pour effacer la mémoire tampon d'entrée.fflush(stdin)
a un comportement indéfini dans la programmation en C. Il pourrait fonctionner comme prévu sur certains systèmes, mais il n'est pas une bonne pratique en général.