¿Por qué getchar in no se ejecuta después de la primera iteración?

Escribí un progtwig para leer el carácter de entrada por carácter, lo imprimí en la salida y aquí está mi código:

#include  main() { int c; while((c = getchar()) != EOF) { printf("%s\n", "log1"); printf("%c\n", c); printf("%s\n", "log2"); } } 

Y este es el resultado:

 a(my input) log1 a log2 log1 log2 

pero debería tener este resultado:

 a log1 a log2 

¿Qué hay de malo con este progtwig?

Usted da una entrada y una nueva línea

 a(my input) You are giving a and newline //this is because of a log1 a log2 //this is because of newline log1 log2 

Compruebe si hay nueva línea y evite imprimir nueva línea.

  while((c = getchar()) != EOF) { if(c!='\n') { printf("%s\n", "log1"); printf("%c\n", c); printf("%s\n", "log2"); } } 

Esto se debe a que while((c = getchar()) != EOF) finaliza después de golpear EOF. Esto se debe a que cuando escribes algo y presionas la tecla enter, todo se almacena en un búfer interno.

Tu código se detiene cuando getchar no encuentra nada en ese búfer.

También puede consultar esto: – ¿Dónde almacena getchar() la entrada del usuario?

getchar está ejecutando durante la segunda iteración. El problema es que su entrada fue en realidad “a [enter]”, por lo que el segundo carácter que getchar read fue un carácter de nueva línea, e imprimió eso.

Si da entrada de “abc”, las cosas pueden parecer más claras.

while (getchar ()! = ‘\ n’);

tenga en cuenta que la expresión en el bucle while se ejecuta cada vez, por lo que incluso cuando se encuentra el carácter ‘\ n’, la llamada getchar () ya lo ha eliminado de la secuencia.

Coloque una condición para no imprimir \n (al presionar Enter

  while((c = getchar()) != EOF) { if(c != '\n') printf("%s\n", "log1"); printf("%c\n", c); printf("%s\n", "log2"); }