GNU/Linux >> LINUX-Kenntnisse >  >> Linux

fflush() funktioniert nicht unter Linux

Verwenden Sie nicht fflush, verwenden Sie stattdessen diese Funktion:

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

fflush(stdin) hängt von der Implementierung ab, aber diese Funktion funktioniert immer. In C gilt es als schlechte Praxis, fflush(stdin) zu verwenden .


Das Verhalten von fflush ist nicht für Eingabeströme definiert (Online-2011-Standard):

7.21.5.2 Die fflush Funktion

Zusammenfassung

1

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

2 Wenn stream auf einen Ausgabestream oder einen Aktualisierungsstream zeigt, in den die letzte Operation nicht eingegeben wurde, wird der fflush Die Funktion bewirkt, dass alle ungeschriebenen Daten für diesen Stream, die an die Hostumgebung geliefert werden sollen, in die Datei geschrieben werden; andernfalls ist das Verhalten undefiniert.

3 Wenn stream ist ein Nullzeiger, der fflush Die Funktion führt diese Spülaktion für alle Streams aus, für die das Verhalten oben definiert ist.

Rückgaben

4Die fflush Die Funktion setzt den Fehlerindikator für den Stream und gibt EOF zurück, wenn ein Schreibfehler auftritt, andernfalls gibt sie Null zurück.

Ich hatte das gleiche Problem, als ich unter LINUX arbeitete, und eine alternative Lösung dieses Problems kann darin bestehen, dass Sie ein Dummy-Zeichen definieren, sagen wir char dummy; und geben Sie scanf() ein um es zu scannen, kurz bevor Ihre eigentliche Eingabe stattfindet. Das hat bei mir funktioniert. Ich hoffe, es würde auch für Sie funktionieren.


Eine, die unter Linux immer funktioniert:

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

Sie können tcdrain verwenden und tcflush nicht nur für in/out/err fd.


Linux
  1. Skype-Mikrofon funktioniert nicht in Linux Mint 17 [Kurztipp]

  2. Linux – Caps Lock Led funktioniert nicht auf der Linux-Konsole?

  3. Linux – Kopfhörer funktioniert nicht Linux Mint 18?

  4. R 3.5.0 funktioniert nicht unter Ubuntu 18.04?

  5. So beheben Sie, dass die Tab-Vervollständigung in Ubuntu und Debian nicht funktioniert

Reparieren Sie Spotify-Video-Podcasts, die unter Ubuntu Linux nicht funktionieren

Fix Touchpad Click funktioniert nicht in Linux Mint

Linux – Warum funktioniert USB nicht in Linux, wenn es in Uefi/Bios funktioniert?

Sound Ubuntu Linux 19.10 auf HP Pavilion Aio funktioniert nicht?

pwdx-Befehlsbeispiele in Linux

Feststelltaste funktioniert nicht auf der Linux-Konsole