PDA

Ver la versión completa : C++: fflush(stdin)



Lazaro
01-10-2002, 20:21
Hola a tod@s:

Pues bien... programando en C++, he observado en algun código la expresión:

fflush(stdin);

Q se supone es para vaciar el buffer del teclado.

Yo uso el compilador Borland C++ 5.01 y programo bajo windows, y la omisión del mencionado fflush no me supone ningún inconveniente.

De la misma forma, tb he observado diferencias de sintaxis en la gestión de ficheros, de tal modo q ciertos códigos no me van ( y tengo q hacerlo a mi manera ).

PREGUNTA: ¿Por qué? Lo q quiero saber es si todo esto se debe al compilador o al sistema operativo ( q supongo q lo del fflush se debera a esto )

Espero haberme explicado bien. Gracias.

bytezmat
02-10-2002, 06:14
hola... un poco complicado entender lo que quieres decir...
bueno...
como es eso de vaciar el buffer del teclado ???
yo tengo entendido que esta funcion(rutina) sirve para vaciar el contenido de cualquier direccion de memoria (buffer)
no creo que el problema que tienes, que en realidad no se cual es,
sea por el sist. op. que tengas porque esta funcion es bastante portable... por lo de el compilador yo tengo el C++ Builder 5.0 y no me ha dado ningun problema esta funcion
salu2
bYteZmaT

POSIX
02-10-2002, 15:35
fflush() no vale para buffers de entrada como el teclado, aunque en windows funcione, está hecho para buffer de salida, como stdout por ejemplo. Para limpiar el buffer de teclado puedes hacerlo con la libreria readline o la termcap.

NeoGenessis
02-10-2002, 18:16
La respuesta del fflush es para vaciar el buffet de entrada y/o salida por defecto, tanto de pantalla, como de teclado como ficheros. Era necesario en Ms-Dos y solo en algunos casos (dependia de las funciones usadas). De todas formas si programas para linux puede serte necesario.

Lazaro
02-10-2002, 19:13
No es q el fflush me diera problemas, al contrario, yo no lo utilizaba nunca pero observaba q en ciertos códigos había gente q si lo hacía.
(bytezmat tienes razón y en el post no me he expresado con mucha claridad, sorry)

Lo q quería saber era si el hecho de q fuera necesario utilizarlo o no, dependía del sistema operativo o del compilador o de qué. Con la respuesta de NeoGenessis me queda aclarado.

Gracias a todos por contestar.

POSIX
02-10-2002, 19:38
Es recomendable usarlo cuando se escribe en ficheros por ejemplo, por si aborta el programa hay sistemas operativos que no fuerzan a volcar lo que quede del buffer en el archivo (donde digo archivo puede ser cualquier stream).
NeoGenesis fflush() NO está hecha para limpiar buffers de entrada, echale una miradita a algúnm libro de C antes de hablar.

ledo
08-10-2002, 19:29
lo q pasa es q sino lo pones y tas trabajando con ficheros a la ora d introducir una cadena d caracteres el intro tb t lo mete x lo q se salta a la siguiente parte: un ejemplo:
si pones printf("Dame tu nombre:");
scanf("%c",&nom);
printf("Introduce tu nombre:");
scanf("%d",&edad);
sino lo pones se saltaria el reglon del segundo printf por lo q la edad no podrias introducirla por eso se suele aser justo despues d usar una cadena de caracteres para vaciar el buffer y no t coja el intro como una parte d esa cadena de caracteres. espero q t aya qdao claro ;)

NeoGenessis
10-10-2002, 17:49
yo tengo algunos ejemplos que lo usan para asegurar que no hay caracteres "Basura". Sobre todo juegos.

Por cierto, no me he mirado un libro, me lo han dicho en la uni.

Un saludo. :cool:

POSIX
10-10-2002, 23:05
Porque serán juegos que SOLO funcionan en Windows, busca en google fflush(stdin) problem y deja de decir tontadas, y dile a tu profesor de la uni que es un desgraciado.

NeoGenessis
07-11-2002, 15:28
Se lo dire de tu parte.

NeoGenessis
11-11-2002, 11:42
El que crea que fflush(stdin) no existe o no funciona o algo asi que lo pruebe.

Funciona perfectamente en diversos compiladores, entre ellos turbo c++ 3 de borland (ahi es nada). No da problemas de compilacion ni ejecucion.

ademas existe un codigo equivalente en Quick basic que esta presente en muchos juegos y programas de menus.

Para colmo en 2 de los cinco tutoriales que tengo en casa lo pone (los otros 3 no hablan de fflush).

Aunque como siempre:
1.-la documentacion nunca es completa
2.-La documentacion siempre tiene errores

por eso lo mejor es probarlo uno mismo (como todo hijo de Ms-Dos sabe).

Una ultima cosa que me ha dicho ese profe: el que dice que algo NO existe tiene siempre el doble de posibilidades de equivocarse:

-El que dice que existe solo puede equivocarse por que no exista.
-el que dice que no existe puede equivocarse por que si exista o por que no lo conocca.

Un saludo.

:cool:

POSIX
12-11-2002, 18:50
Pero este tio es tonto, te estoy diciendo que en Windows, y por consiguiente en MS-DOS si funciona, pero que fflush() NO, y repito NO, está hecha para flujos de entrada, y si aun no estás convencido te dije que buscases en google fflush problem y buscando un poquito te saldrá la web de un señor que sabe bastante mas que tu y tu profesor explicandote el problema y como se puede solucionar siguiendo la normal POSIX y la norma ANSI.