I

IgnaxMartin

Usuario (Venezuela)

Primer post: 29 jun 2016Último post: 29 jun 2016
1
Posts
10
Puntos totales
1
Comentarios
¿
¿Que es y para que sirve la funcion fflush en C?
Ciencia EducacionporAnónimo6/29/2016

¿Que es fflush? Es una funcion utilizada en Lenguaje C para limpiar el buffer del teclado, a fin de eliminar el salto de linea automatico que este pone por si solo. ¿Y como es eso? Supongamos que queramos ejecutar el siguiente programa: #include <stdio.h>                                                               int main(){   int a, b;    printf( "Introduzca el primer numero: " );   scanf( "%d", &a );   printf( "Introduzca el segundo numero: " );   scanf( "%d", &b );   printf( "Los valores son: %d, %d ", a, b );    return 0; } Cuando vayamos a ejecutar vamos a ver algo parecido a esto: Introduzca el primer numero: 76 Introduzca el segundo numero: 45 Los valores son: 76, 45 Obsérvese que, cuando se ejecuta scanf, por ejemplo, en la primera vez scanf( "%d", &a ); el programa se detiene a la espera de que el  usuario  teclee el  dato de entrada  requerido, el cual es almacenado, temporalmente, en el buffer (memoria intermedia) de la entrada estándar. Y cuando se pulsa la tecla INTRO, es, en ese momento, cuando a la  variable  a se le asigna el valor introducido. Pero, además, se produce un salto de línea automático, de forma que, después de introducir el número 76, la siguiente instrucción se muestra una línea más abajo. De igual forma, después de la instrucción scanf( "%d", &b ); también se produce un salto de línea automático. En este ejemplo todo ha ido muy bien, sin embargo, se tiene que tener especial cuidado si utilizados scanf para leer  caracteres . Supongamos ahora que vamos a trabajar con caracteres: #include <stdio.h> int main() {    char a, b, c;    printf( "Introduzca primer caracter: " );    scanf( "%c", &a );    printf( "Introduzca segundo caracter: " );    scanf( "%c", &b );    printf( "Introduzca tercer caracter: " );    scanf( "%c", &c );    printf( "Los valores son: %c, %c, %c ", a, b, c );    return 0; } Por pantalla saldria algo asi: Introduzca primer caracter: f Introduzca segundo caracter: Introduzca tercer caracter: h Los valores son: f, , h En esta ocasión, ¿por qué no se ejecuta, correctamente, la siguiente instrucción? scanf( "%c", &b ); La razón es la siguiente: cuando se ejecuta la primera  instrucción de entrada : scanf( "%c", &a ); después de asignar el carácter 'f' a la variable a, se produce un salto de línea automático, pero, en el buffer del teclado también se ha quedado almacenada la secuencia de escape (n), que es, precisamente, un carácter. En consecuencia, cuando se ejecuta la instrucción scanf( "%c", &b ); a la variable b se le asigna el salto de línea almacenado en el buffer de la entrada estándar, y la ejecución del programa continua con la siguiente instrucción. Ahora, el buffer vuelve a estar vacío y, por tanto, la entrada de la variable c sí que se ejecuta de forma correcta. Para comprobar que esto es así, podemos sustituir la instrucción printf( "Los valores son: %c, %c, %c ", a, b, c ); por esta otra: printf( "Los valores son: %d, %d, %d ", a, b, c ); En pantalla veremos:Introduzca primer caracter: f Introduzca segundo caracter: Introduzca tercer caracter: h Los valores son: 102, 10, 104y como se puede comprobar en las tablas del  ASCII , los números 102, 10 y 104 corresponden a los caracteres 'f', LF (Salto de Línea) y 'h', respectivamente. Para resolver este problema, antes de leer un carácter con scanf, hay que vaciar (limpiar) el buffer del teclado. Para ello, se utiliza la  función  fflush. De forma que, el código quedaría de la siguiente manera: #include <stdio.h> int main() {    char a, b, c;    printf( "Introduzca primer caracter: " );    scanf( "%c", &a );    printf( "Introduzca segundo caracter: " );    fflush( stdin );    scanf( "%c", &b );    printf( "Introduzca tercer caracter: " );    fflush( stdin );    scanf( "%c", &c );    printf( "Los valores son: %c, %c, %c ", a, b, c );    return 0; } La primera vez que se ejecuta scanf, el buffer del teclado está vacío, por tanto, no es preciso utilizarfflush, pero sí, en los dos casos posteriores. Obsérvese que, a fflush hay que indicarle el buffer a limpiar, Standar Input (stdin) en este caso. ¿Que es el buffer del teclado? El buffer de  teclado  es una memoria intermedia en la que se van almacenando los caracteres que un usuario teclea, los cuales son tratados por el computador apenas se libere un recurso.

10
1
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.