La boucle While ignore scanf pour la deuxième fois

#include  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émarre la boucle while mais ignore le scanf pour la deuxième fois et termine la boucle par la suite. Quelqu’un peut-il aider?

Assurez-vous que le scanf supprime la nouvelle ligne. Changez le en:

 scanf(" %c", &loop); ^ 

Vous avez probablement dû entrer une nouvelle ligne pour que l’entrée entre dans votre programme, non? La deuxième fois que votre boucle s’exécute, elle lit ce caractère de nouvelle ligne qui attendait d’être lu et quitte automatiquement la boucle ( '\n' != 'y' ). Vous pouvez faire en sorte que scanf ignore les espaces en utilisant plutôt cette chaîne de format:

 " %c" 

Une solution consiste à utiliser fflush(stdin) après l’instruction scanf() pour vider le tampon d’entrée.