Hacer mientras bucle con elección como char en C

En mi código dado a continuación, si presiono ‘y’ por una vez, volverá a repetirse, pero luego no está pidiendo que se repita el próximo tomo (o presione ‘y’). ¿Puede alguien ayudar a explicar por qué este código termina después de un ciclo?

main() { char choice; do { printf("Press y to continue the loop : "); scanf("%c",&choice); }while(choice=='y'); } 

Eso será porque la entrada estándar está en búfer. Por lo tanto, probablemente esté ingresando la cadena de una y seguida de un \n (carácter de nueva línea).

Así que la primera iteración toma la y , pero la siguiente iteración no necesita ninguna entrada de usted porque la \n es la siguiente en el búfer estándar. Pero puede evitar esto fácilmente haciendo que scanf consum el espacio en blanco final.

 scanf("%c ",&choice); 

NOTA: el espacio después de la c en "%c "

Pero, su progtwig puede atascarse en un bucle infinito si la entrada termina con una y . Así que también debes comprobar el resultado del scanf . p.ej

 if( scanf("%c ",&choice) <= 0 ) choice = 'n'; 

Debería leer el carácter de nueva línea después de esa llamada a scanf (). De lo contrario, eso entra en elección la próxima vez y el bucle while sale.

 #include int main() { char choice; do { printf("Press y to continue the loop : "); choice = getchar(); getchar(); } while(choice=='y'); return 0; } 

En el primer carácter de la cadena de formato scanf, inserte un espacio. Esto borrará todos los caracteres de espacios en blanco de la entrada estándar antes de leer los datos.

 #include  int main (void) { char choice; do { printf("Press y to continue the loop : "); scanf(" %c",&choice); // note the space }while(choice=='y'); return 0; }