GNU/Linux >> Linux Esercitazione >  >> Linux

fflush() non funziona in Linux

Non usare fflush, usa invece questa funzione:

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

fflush(stdin) dipende dall'implementazione, ma questa funzione funziona sempre. In C, è considerata cattiva pratica usare fflush(stdin) .


Il comportamento di fflush non è definito per i flussi di input (standard online 2011):

7.21.5.2 Il fflush funzione

Sinossi

1

    #include <stdio.h>
    int fflush(FILE *stream);
Descrizione

2 Se il flusso punta a un flusso di output o a un flusso di aggiornamento in cui non è stata immessa l'operazione più recente, il fflush la funzione fa sì che tutti i dati non scritti per quel flusso da consegnare all'ambiente host vengano scritti nel file; in caso contrario, il comportamento è indefinito.

3 Se stream è un puntatore nullo, il fflush La funzione esegue questa azione di scaricamento su tutti i flussi per i quali il comportamento è definito sopra.

Resi

4Il fflush La funzione imposta l'indicatore di errore per il flusso e restituisce EOF se si verifica un errore di scrittura, altrimenti restituisce zero.

Ho riscontrato lo stesso problema mentre lavoravo su LINUX e una soluzione alternativa a questo problema può essere la definizione di un carattere fittizio diciamo char dummy; e inserisci un scanf() per scansionarlo appena prima che avvenga l'effettivo input. Questo ha funzionato per me. Spero che funzioni anche per te.


Uno che funziona sempre su 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);
}

Puoi usare tcdrain e tcflush non solo per in/out/err fd.


Linux
  1. Il microfono Skype non funziona in Linux Mint 17 [Suggerimento rapido]

  2. Linux – Le cuffie non funzionano Linux Mint 18?

  3. Suono Ubuntu Linux 19.10 Su Hp Pavilion Aio non funziona?

  4. R 3.5.0 non funziona su Ubuntu 18.04?

  5. Come risolvere il completamento delle schede che non funziona in Ubuntu e Debian

Risolto il problema con i podcast video di Spotify che non funzionano su Ubuntu Linux

Correggi il touchpad Fare clic su Non funziona in Linux Mint

Linux – Perché Usb non funziona in Linux quando funziona in Uefi/bios?

Linux:il led Caps Lock non funziona su console Linux?

Esempi di comandi pwdx in Linux

Il collegamento simbolico di Linux non funziona come previsto