• Viernes 8 de Noviembre de 2024, 21:50

Autor Tema:  Sobre la función "fflush(stdin)"  (Leído 8729 veces)

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Sobre la función "fflush(stdin)"
« en: Jueves 13 de Mayo de 2010, 11:13 »
0
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

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Sobre la función "fflush(stdin)"
« Respuesta #1 en: Jueves 13 de Mayo de 2010, 15:14 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Sobre la función "fflush(stdin)"
« Respuesta #2 en: Viernes 14 de Mayo de 2010, 11:54 »
0
Pero "sscanf" es de C++ y yo estoy usando C.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Sobre la función "fflush(stdin)"
« Respuesta #3 en: Viernes 14 de Mayo de 2010, 14:32 »
0
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
  1.  
  2. void limpiarbuffer()
  3. {
  4.    while(getchar() != 'n');
  5. }
  6.  
  7.  
saludos
The sweet smell of a great sorrow lies over the land.


Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Sobre la función "fflush(stdin)"
« Respuesta #4 en: Viernes 14 de Mayo de 2010, 14:56 »
0
Como ya te dijeron sscanf es una funcion de C.

Es mejor no ensuciar el buffer que limpiarlo  ;)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.