• Domingo 29 de Septiembre de 2024, 01:27

Autor Tema:  Fflush(stdio)  (Leído 3175 veces)

fredes

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Fflush(stdio)
« en: Lunes 6 de Septiembre de 2004, 20:20 »
0
Hola a todos:

Estoy programando C de forma basica sobre Linux con gcc. He leido que la funcion fflush(stdin) no limpia el buffer de entrada en Linux y que solo vacia los streams de salida.
Pregunto si es esto cierto y en caso de que lo sea que otra solucion puedo encontrar para vaciar el buffer de entrada.

Muchas gracias y un saludo

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fflush(stdio)
« Respuesta #1 en: Martes 7 de Septiembre de 2004, 16:17 »
0
si lo que tienes es el problema de que al digitatr muchas teclas en veza de una el programa 'guarda' esa infromacion y depues las procesa una por una... te puedo ayudar.. cuanteme puntualmente tu problema.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

fredes

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Fflush(stdio)
« Respuesta #2 en: Martes 7 de Septiembre de 2004, 20:15 »
0
por ejemplo si hago:

scanf("%c",&a);

.......

scanf("%c",&b);

No me pide una entrada por teclado en el segundo scanf (se lo salta) porque queda el retorno de carro en el buffer. Si meto un getchar() por el medio funciona, pero me gustaria tener una solucion similar a la que uso en Windows que es la funcion fflush(stdin).

Espero explicarme y muchas gracias por la respuesta

Rataman

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Fflush(stdio)
« Respuesta #3 en: Miércoles 8 de Septiembre de 2004, 00:33 »
0
prueba a poner el fflush(stdin) justo antes del segundo (o el numero k sea) scanf()

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fflush(stdio)
« Respuesta #4 en: Miércoles 8 de Septiembre de 2004, 05:55 »
0
ese fflsh(stdin)
ya no se ni cunado funciona ya que en visual c++ .net tambien presenta problemas la solucion...
no hay.

no metiras si hay..
es esta:

1- No uses scanf usa gets
2- deja que gets capture un buffer.. es decir que sea capaz de capturar un numero razonable de caracteres  posiblemente 50
3- una vez capturada la entrada del teclado hace la asignacion de solo el primer caracter eliminando de este modo , o mejor ignorando el resto de los caracteres.

<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
char buffer[5]={'\0','\0','\0','\0','\0'};
char opcion, opcion2;
gets(buffer);
opcion =buffer[0];
...
...
...
gets(buffer);
opcion2 =buffer[0];
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

fredes

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Fflush(stdio)
« Respuesta #5 en: Miércoles 8 de Septiembre de 2004, 17:15 »
0
Me parece bien eso,

todas las soluciones que me han dado coinciden con hacer algo así, o sea leer el buffer un número considerable de caracteres para dejarlo vacío o no utilizar las funciones que puedan dar problemas (scanf("%c" ,&c), porque efectivamente fflush(stdin) para Linux no hace nada. En TurboC por ejemplo, si.

Muchas gracias a todos por la ayuda y saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fflush(stdio)
« Respuesta #6 en: Miércoles 8 de Septiembre de 2004, 17:58 »
0
LO QUE PASA ES QUE SI USAS SCANF te volevraa fallar cuando digiten espacios.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Fflush(stdio)
« Respuesta #7 en: Miércoles 8 de Septiembre de 2004, 18:10 »
0
Hola!!!!!!!!!!!!

El uso de gets no es recomendado. Yo lo use y lo uso pero hay q tener cuidado:
Miren esto

exactamente esta parte lean:
Citar
FALLOS
Puesto que es imposible saber, sin conocer de antemano los datos, cuántos caracteres va a leer gets(), y puesto que gets() continuará guardando caracteres una vez alcanzado el final del búfer, su empleo es extremadamente peligroso. Muchas veces ha sido utilizado para comprometer la seguridad de un sistema. En su lugar emplee fgets() siempre que pueda.

De ultima se puede ir obteniendo de aun acaracter a la vez hasta un Enter por ejemplo.

Salu2!!!!!

fredes

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Fflush(stdio)
« Respuesta #8 en: Jueves 9 de Septiembre de 2004, 17:36 »
0
Pués es verdad, de hecho el compilador gcc da un warning a la hora de compilar con gets.

Lo del scanf pués si con que dará problemas pero con la solución tipo a la de JuanK de vaciar el buffer leyendo no tiene problema, no?

fredes

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Fflush(stdio)
« Respuesta #9 en: Jueves 9 de Septiembre de 2004, 17:37 »
0
salvo por lo del gets claro...la verdad que odio la E/S