a ver... como te dije getchar no le de la tecla que tu introduces sino del buffer.
cuando en esa linea: while ( ( variable = getchar() ) != '0') ...le entras el abc intentare decirte lo que pasa en cada caso.
1º: while ( ( variable = getchar() ) != '0') // Esa linea se lee los datos enviándolos al buffer.
El buffer es una memoria que va acumulando hasta que encuentra '\n' que es el enter. Si no pulsas enter sigue acumulando y acumulando.
pulsas 'a', como a no es \n va al buffer.
Pulsas 'b', como b no es \n va al buffer.
Pulsas 'c', como c no es \n va al buffer.
Entonces pulsas '\n'(ENTER), enter también es un caracter y va parar al buffer igual que las demas. Pero n\ es la señal que dice que ya no vas a entrar con mas datos y entonces es como decir: "Ya no voy entrar con mas datos vacíate". Pero entonces necesitas algo que te lo vacié, una función como bien puede ser getchar() que va obteniendo un char a la vez como su nombre indica get char.
entonces digamos que has entrado "abc\n" asi quedaría el buffer tras entrar abc y pulsar enter. Entonces es la hora de actuar getchar()... va el y quita un char del bufer y lo mete en "variable" y luego se compara con '0', como 'a' no es '0' putchar imprime la variable.
Luego se repite el proceso, getchar saca 'b' del bufer y lo mete en la variable, como 'b' != '0' putchar muestra la variable.
Y luego el proceso se repite con c igualmente.
También lo hace para el enter, pero la diferencia es que enter no es un carácter imprimible y no se le "ve". Pero si puedes notar que hay un salto de linea que no has pedido que haga y eso es el enter.
Si entras con "abc0\n" ni te va mostrar el salto de linea por que cuando encuentre el 0 en el buffer el bucle while se va interrumpir inmediatamente por causa del !='0' dejando el enter en el buffer, incluso te puede provocar errores posteriores si intentas leer algún otro char o string posteriores al bucle.
En fin mire este código:
Entre con abc0 y pulse enter:
Código C:
Ver original#include <stdio.h>
int main (){
char variable;
//Entre con la cadena "abc0" y pulse enter
while ( ( variable
= getchar() ) != '0'){ }
//voy a demostrar que salto de linea sigue en el buffer y lo voy a extraer con este ultimo getchar
//segun la tabla asc2 un salto de linea(ENTER) es equivalente a 10 en decimal. Si for asi...
//...imprimira lo de abajo antes de terminar
if( variable == 10 ){
printf ("Enter estaba en el buffer tras el bucle, la tecla es: %d. Confiera en la tabla asc2 la tecla enter.", variable
); }
//¿Aque no se imprimio el salto?Pero siguia en el buffer y lo extrajimos después del bucle
return 0;
}
te dejo una tabla asc2 muy util:
http://www.elcodigoascii.com.ar/codi...digo-ascii.png
La cosa es comprender que es el buffer y como trabaja ya que muchas funciones lo usan por no decir casi todas.
Cuanto antes lo entiendas como trabaja antes puedes prevenir errores con el dichoso enter. XD