GNU/Linux >> Tutoriales Linux >  >> Linux

fflush() no funciona en Linux

No use fflush, use esta función en su lugar:

#include <stdio.h>
void clean_stdin(void)
{
    int c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

fflush(stdin) depende de la implementación, pero esta función siempre funciona. En C, se considera una mala práctica usar fflush(stdin) .


El comportamiento de fflush no está definido para flujos de entrada (estándar en línea de 2011):

7.21.5.2 El fflush función

Sinopsis

1

    #include <stdio.h>
    int fflush(FILE *stream);
Descripción

2 Si el flujo apunta a un flujo de salida o un flujo de actualización en el que no se ingresó la operación más reciente, el fflush La función hace que los datos no escritos de esa transmisión se entreguen al entorno host para que se escriban en el archivo; de lo contrario, el comportamiento no está definido.

3 Si stream es un puntero nulo, el fflush La función realiza esta acción de vaciado en todos los flujos cuyo comportamiento se definió anteriormente.

Devoluciones

4El fflush La función establece el indicador de error para la secuencia y devuelve EOF si se produce un error de escritura; de lo contrario, devuelve cero.

Enfrenté el mismo problema mientras trabajaba en LINUX y una solución alternativa a este problema puede ser que definas un carácter ficticio, digamos char dummy; y pon un scanf() para escanearlo justo antes de que tenga lugar la entrada real. Esto funcionó para mí. Espero que funcione para ti también.


Uno que siempre funciona en Linux:

#include <termios.h>
#include <unistd.h>

void clean_stdin()
{
        int stdin_copy = dup(STDIN_FILENO);
        /* remove garbage from stdin */
        tcdrain(stdin_copy);
        tcflush(stdin_copy, TCIFLUSH);
        close(stdin_copy);
}

Puedes usar tcdrain y tcflush no solo para entrada/salida/err fd.


Linux
  1. ¿Dónde está la función itoa en Linux?

  2. El comando de Linux 'll' no funciona

  3. El comando linux date -s no funciona para cambiar la fecha en un servidor

  4. El led de bloqueo de mayúsculas no funciona en la consola Linux

  5. La vinculación simbólica de Linux no funciona como se esperaba

Arreglar los podcasts de video de Spotify que no funcionan en Ubuntu Linux

Arreglar el clic del panel táctil que no funciona en Linux Mint

Linux:¿por qué el USB no funciona en Linux cuando funciona en Uefi/bios?

Linux:¿el bloqueo de mayúsculas no funciona en la consola de Linux?

Linux:¿los auriculares no funcionan en Linux Mint 18?

Ejemplos de comandos pwdx en Linux