• Jueves 25 de Abril de 2024, 23:12

Autor Tema:  fflush (stdin) , flusshal. cuando usarlos? como funcionan?  (Leído 11717 veces)

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« en: Viernes 24 de Abril de 2009, 07:11 »
0
hola amigos del foro. como dice el titulo quisiera saber cuales de estas dos funciones usar para limpiar el buffer, el dev-c++ no reconoce flusshal(), pero en un examen final vi que lo utilizan.

ahora algunas veces por ejemplo tengo:
sentencias;
..;
..;
c=getchar();

y el programa sigue de largo, por lo que para que tome un caracter hay ke ponerle
sentencias;
..;
..;
c=getchar();
c=getchar();

pero si le ponemos
sentencias;
..;
..;
fflush(stdin);
c=getchar();
toma el caracter sin ningun problema.

la pregunta es... cuando utilizar esa funcion??? porque en un programa la incluyo a cada rato y no quiero que se me vuelva un vicio!!, la antepongo siempre ante una toma de caracter o palabra, esta bien?
como funciona exactamente?

muchas gracias. espero sus respuestas!!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #1 en: Viernes 24 de Abril de 2009, 08:05 »
0
Nunca hay que usar fflush con stdin, su comportamiento es indefinido por el standard.

Es mejor que uses fgets y sscanf.

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.

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #2 en: Viernes 24 de Abril de 2009, 20:54 »
0
mmm.. sigo sin entender...
como hago para limpiar el buffer? para que sirve limpiar el buffer? cuando tengo que hacerlo?..
espero su respuesta. muchas gracias!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #3 en: Viernes 24 de Abril de 2009, 21:27 »
0

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.

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #4 en: Lunes 27 de Abril de 2009, 21:46 »
0
amigos, no me quedo muy claro esto, por lo tanto voy con un ejemplo:

en este ejercicio en la carga  de datos, se saltean algunos gets.. es ahi cuando debo limpiar el buffer??. espero sus respuestas.. muchas gracias!

Código: C
  1.  
  2. # include <stdio.h>
  3. # include <string.h>
  4. # define sub 50
  5.  
  6. struct productos
  7. {
  8.        char codigo[5];
  9.        char modelo[10];
  10.        char descripcion[200];
  11.        float precio;
  12.        char codprov[10];
  13.        char nomprov[30];
  14. };
  15.  
  16. void carga (struct productos [],int *);
  17.  
  18. main()
  19. {    
  20.       struct productos prod[sub];
  21.       int cant_prod;
  22.       cant_prod=0;
  23.      
  24.       carga (prod,&cant_prod);
  25. }
  26.  
  27. void carga (struct productos p[],int *cant )
  28. {
  29.      int i=*cant;
  30.      char r;
  31.      do
  32.      {  
  33.          
  34.          printf ("Ingrese Codigon");
  35.          scanf ("%s",&p[i].codigo);
  36.          [color=#BF0000]//fflush (stdin)????????????????????;[/color]
  37.          printf ("Ingrese Modelon");
  38.          gets(p[i].modelo);
  39.          printf ("Ingrese Descripcionn");
  40.          gets(p[i].descripcion);
  41.          printf ("Ingrese Precion");
  42.          scanf ("%f",&p[i].precio);        
  43.          printf ("Ingrese Cod proveedorn");
  44.          scanf("%s",p[i].codprov);                  
  45.          printf ("Ingrese Nombre proveedorn");
  46.          gets(p[i].nomprov);
  47.          i++;
  48.          printf ("Seguir ingresando datos?n");
  49.          scanf ("%c",&r);
  50.          }while (r !='n');
  51.      *cant=i;
  52. }
  53.  
  54.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #5 en: Lunes 27 de Abril de 2009, 22:55 »
0
No, en lugar de usar scanf y gets, usa fgets (con stdin) y sscanf.

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.

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #6 en: Martes 28 de Abril de 2009, 02:06 »
0
Hay dos opciones para que no hayan saltos

1) Limpiar el buffer y luego capturar

Ej:
Código: C
  1. fflush(stdin);
  2. gets(arreglo);
  3.  

2) Usar getchar (Que para el caso funciona como un filtro) y capturar

Ej:
Código: C
  1.  getchar();
  2. scanf("%c",&var);
  3.  

El problema en ambos casos es el mismo, se queda el caracter 'n' en el buffer en una captura de datos previa y al realizar el intento de una nueva captura tal caracter se libera

Saludos

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #7 en: Martes 28 de Abril de 2009, 04:13 »
0
excelente!! eso queria saber!!... osea ke limpio el buffer tantas veces como "gets" use?

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #8 en: Martes 28 de Abril de 2009, 06:27 »
0
Cita de: "kingsizen"
excelente!! eso queria saber!!... osea ke limpio el buffer tantas veces como "gets" use?

Si o captures caracteres con scanf();

Saludos

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: fflush (stdin) , flusshal. cuando usarlos? como funcionan?
« Respuesta #9 en: Martes 28 de Abril de 2009, 08:02 »
0
NINGUNA DE ESAS OPCIONES ES BUENA, A VER SI LEEN POR FAVOR!

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.