Programación General > C/C++
Sobre la función "fflush(stdin)"
(1/1)
Aprendiz21Sam:
Hola, tengo un problema de comprensión sobre la función "fflush(stdin)". Se supone que es para limpiar la salida y no la entrada, sin embargo (stdin) indica que se limpia el buffer de entrada.
Cuando utilizo un bucle donde hay un "scanf();" necesito utilizar la función "fflush(stdin)" para que funcione correctamente el "scanf". Ahora bien, esta función no es estándar. A parte, a veces funciona antes del "scanf" y otras funciona justo después del "scanf".
Necesito saber
1-Cuál es el comportamiento exacto de "fflush(stdin)".
2-Cuándo debo (si es que debo) utilizarla.
3-Si no fuera correcto usarla, qué utilizo para sustituir "scanf()" u otras funciones que ensucien el buffer.
Gracias de antemano.
Eternal Idol:
Se trato muchas veces, en sintesis:
1. No uses fflush con stdin nunca, su comportamiento no esta definido en el standard. http://www.cplusplus.com/reference/clib ... io/fflush/
2. No uses la anterior con stdin ni scanf nunca.
3. Usa fgets (con stdin) y sscanf, de esta manera no hace falta limpiar el buffer.
Aprendiz21Sam:
Pero "sscanf" es de C++ y yo estoy usando C.
Epa:
sscanf es una funcion de c, que esta definida en la libreria stdio
otra forma, que creo que no tiene inconvenientes es hacer algo como:
--- Código: C --- void limpiarbuffer(){ while(getchar() != 'n'); } saludos
Eternal Idol:
Como ya te dijeron sscanf es una funcion de C.
Es mejor no ensuciar el buffer que limpiarlo ;)
Navegación
Ir a la versión completa