¡fflush es para flujos de salida!

El otro día estaba haciendo una práctica para la carrera donde había un pequeño menú con opciones numeradas para que el usuario eligiese la que quisiera. Para obtener la opción elegida por el usuario usé getchar, esta función extrae sólo el primer carácter del buffer del teclado, dejando por ejemplo, el retorno de carro y todo lo demás. El problema se encontraba en la segunda llamada a getchar, pues devolvía la basura que había quedado en el buffer sin esperar una entrada por parte del usuario.

Instantáneamente ví que la solución al problema era usar “fflush(stdin)“. Lo habíamos usado el año anterior en otras práctica y nos había funcionado de maravilla, pero resultó que esta vez no funcionaba

¿Por qué no?
Bien, parece ser que “fflush” está programado para aplicarse a flujos de salida y no de entrada como el de teclado. Así pues la única sólución posible que nos queda es leer todos los caracteres restantes dell buffer hasta dejarlo vacío. Esto podría hacerse con algo así:

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

Pero, ¿Por qué nos había funcionado el año anterior? Pues, al parecer, “fflush” sobre un flujo de entrada es un agregado que han hecho a la función estándar en Windows que es donde hicimos las prácticas. En esta ocasión no nos funcionó porque usabamos Linux donde no existía tal ampliación de la función.

Bueno, es un pequeño detalle, pero espero que os sirva para quien se encuentre confundido como yo lo estaba.

Anuncios
Esta entrada fue publicada en Informática y etiquetada , , , . Guarda el enlace permanente.

2 respuestas a ¡fflush es para flujos de salida!

  1. Cricri dijo:

    Y ahora lo pones mamón jajaja

  2. Cris dijo:

    Jaja bueno yo sigo usandolo, me salvo en muchas ocaciones

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s