While-loop ignora scanf la segunda vez

#include  int main () { char loop='y'; while(loop != 'n') { printf("loop? "); scanf("%c", &loop); if(loop != 'y') { loop='n'; } } return 0; } 

Si escribo ‘y’, reinicia el ciclo while, pero ignora el scanf la segunda vez y termina el ciclo después de eso. ¿Alguien puede ayudar?

Asegúrese de que el scanf descarte la nueva línea. Cambiarlo a:

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

Probablemente tengas que ingresar una nueva línea para que la entrada vaya a tu progtwig, ¿verdad? La segunda vez que el ciclo se ejecuta, lee ese carácter de nueva línea, que estaba “esperando” ser leído y sale automáticamente del ciclo ( '\n' != 'y' ). Puede hacer que scanf ignore el espacio en blanco usando en su lugar esta cadena de formato:

 " %c" 

Una solución puede ser el uso de fflush(stdin) después de la instrucción scanf() para borrar el buffer de entrada.