Resultados 1 al 12 de 12

Tema: C++: fflush(stdin)

  1. #1 C++: fflush(stdin) 
    Avanzado
    Fecha de ingreso
    Mar 2002
    Mensajes
    357
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

  2. #2 ... 
    Iniciado
    Fecha de ingreso
    Sep 2002
    Mensajes
    11
    Descargas
    0
    Uploads
    0
    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
    Citar  
     

  3. #3  
    Medio
    Fecha de ingreso
    Sep 2002
    Mensajes
    119
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

  4. #4 La respuesta... 
    Avanzado
    Fecha de ingreso
    Dec 2001
    Ubicación
    BCN
    Mensajes
    469
    Descargas
    0
    Uploads
    0
    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.
    La resitencia es futil, todos sereis asimilados.
    NeoGenessis
    Citar  
     

  5. #5  
    Avanzado
    Fecha de ingreso
    Mar 2002
    Mensajes
    357
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

  6. #6  
    Medio
    Fecha de ingreso
    Sep 2002
    Mensajes
    119
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

  7. #7  
    Medio
    Fecha de ingreso
    Feb 2002
    Ubicación
    ??
    Mensajes
    68
    Descargas
    0
    Uploads
    0
    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
    ledo :P
    Citar  
     

  8. #8 Pues POSIX 
    Avanzado
    Fecha de ingreso
    Dec 2001
    Ubicación
    BCN
    Mensajes
    469
    Descargas
    0
    Uploads
    0
    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.
    La resitencia es futil, todos sereis asimilados.
    NeoGenessis
    Citar  
     

  9. #9  
    Medio
    Fecha de ingreso
    Sep 2002
    Mensajes
    119
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

  10. #10 Oido cocina... 
    Avanzado
    Fecha de ingreso
    Dec 2001
    Ubicación
    BCN
    Mensajes
    469
    Descargas
    0
    Uploads
    0
    Se lo dire de tu parte.
    La resitencia es futil, todos sereis asimilados.
    NeoGenessis
    Citar  
     

  11. #11 De los hijos de Ms-Dos a los hijos de Windows 
    Avanzado
    Fecha de ingreso
    Dec 2001
    Ubicación
    BCN
    Mensajes
    469
    Descargas
    0
    Uploads
    0
    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.

    La resitencia es futil, todos sereis asimilados.
    NeoGenessis
    Citar  
     

  12. #12  
    Medio
    Fecha de ingreso
    Sep 2002
    Mensajes
    119
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •