Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/10/2014, 14:08
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 3 meses
Puntos: 38
Respuesta: La funcion getchar()

El teclado tiene un buffer. Si tienes un código igual a ese:
Código C:
Ver original
  1. char variable;
  2.    
  3.     //hasta que la letra no sea un numero cero no se para
  4.     while ( ( variable = getchar() ) != '0'){
  5.         putchar(variable);
  6.     }

Lo que ocurre es que getchar se detiene para pedir una letra pero realmente nada impide que metas ahí 100 letras, todas van a parar al bufer.
Lo que pasa es que cuando pulsas enter, como bien sabes la variable char soloalmacena una variable a la vez, y getchar() no lee desde el teclado, sino desde el buffer del teclado, como le metimos 100 letras en el buffer, pues hasta que no lo vacíe sacando una a una no se queda contento el putchar(). XD

O sea... si me pide en la primera linea del bufer: while ( ( variable = getchar() ) != '0'){ ...una letra y le meto 100, el bucle va funcionar 100+1 veces hasta sacar todas las 100 letras char a char del bufer, mas el enter que también se considera un char.

un código para que lo entiendas puede ser este:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main (){
  5.    
  6.     char variable;
  7.    
  8.     //hasta que la letra no sea un numero cero no se para
  9.     while ( ( variable = getchar() ) != '0'){
  10.         putchar(variable);
  11.         printf(" -Bucle yupiiiii\n");
  12.     }  
  13.    
  14.     getchar(); // no te líes que este getchar es solo para pausar y no tiene nada que ver con el bucle XDD
  15.     return 0;
  16. }
Si pones abcdf te imprimirá eso:
abcdef
a -Bucle yupiiiii
b -Bucle yupiiiii
c -Bucle yupiiiii
d -Bucle yupiiiii
e -Bucle yupiiiii
f -Bucle yupiiiii

-Bucle yupiiiii

El ultimo yupiiiii que no tiene letra es por que pulsaste enter y también se considera una letra pero no es imprimible sino que hace salto de linea y por eso el ultimo enter no va pegado a las demas lineas sino que tiene una linea en blanco entre los anteriores yupiiis XD. Entonces si entras a, b, c, d, e, f y pulsas enter harás 7 yupis tendras un espacio y luego un yupi ahi to misterioso jaja.

Ese bucle te sirve para vaciar el bufer, y incluso es mejor que fflush si le das unos retoques. XD
Espero que te sirva

Última edición por vangodp; 19/10/2014 a las 14:24