GNU/Linux >> Znalost Linux >  >> Linux

fflush() v Linuxu nefunguje

Nepoužívejte fflush, místo toho použijte tuto funkci:

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

fflush(stdin) závisí na implementaci, ale tato funkce vždy funguje. V C je považováno za špatnou praxi používat fflush(stdin) .


Chování fflush není definován pro vstupní toky (online standard 2011):

7.21.5.2 fflush funkce

Souhrn

1

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

2 Pokud tok ukazuje na výstupní tok nebo aktualizační tok, ve kterém nebyla zadána nejnovější operace, fflush funkce způsobí, že všechna nezapsaná data pro tento proud, která mají být doručena do hostitelského prostředí, budou zapsána do souboru; jinak je chování nedefinováno.

3 Pokud je stream je nulový ukazatel, fflush Funkce provádí tuto akci proplachování na všech tocích, pro které je chování definováno výše.

Vrátí se

4fflush funkce nastaví indikátor chyby pro proud a vrátí EOF, pokud dojde k chybě zápisu, jinak vrátí nulu.

Při práci na LINUXu jsem čelil stejnému problému a alternativním řešením tohoto problému může být, že definujete fiktivní znak, řekněme char dummy; a vložte scanf() naskenujte jej těsně předtím, než dojde k vašemu skutečnému zadání. Tohle mi fungovalo. Doufám, že to bude fungovat i vám.


Ten, který vždy funguje na Linuxu:

#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);
}

Můžete použít tcdrain a tcflush nejen pro in/out/err fd.


Linux
  1. Mikrofon Skype nefunguje v Linux Mint 17 [Rychlý tip]

  2. Linux – sluchátka nefungují Linux Mint 18?

  3. Zvuk Ubuntu Linux 19.10 na Hp Pavilion Aio nefunguje?

  1. R 3.5.0 nefunguje na Ubuntu 18.04?

  2. Jak opravit, že dokončování karet nefunguje v Ubuntu a Debianu

  3. PYTHONPATH nefunguje pro sudo na GNU/Linux (funguje pro root)

  1. linux limited.conf nefunguje?

  2. Nightmare.js nefunguje podle očekávání na cloudovém serveru Ubuntu Linux

  3. Linuxový příkaz 'll' nefunguje