GNU/Linux >> Tutoriels Linux >  >> Linux

fflush() ne fonctionne pas sous Linux

N'utilisez pas fflush, utilisez plutôt cette fonction :

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

fflush(stdin) dépend de l'implémentation, mais cette fonction fonctionne toujours. En C, il est considéré comme une mauvaise pratique d'utiliser fflush(stdin) .


Le comportement de fflush n'est pas défini pour les flux d'entrée (norme en ligne 2011) :

7.21.5.2 Le fflush fonction

Synopsis

1

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

2 Si le flux pointe vers un flux de sortie ou un flux de mise à jour dans lequel l'opération la plus récente n'a pas été entrée, le fflush la fonction entraîne l'écriture dans le fichier de toutes les données non écrites pour ce flux à livrer à l'environnement hôte ; sinon, le comportement n'est pas défini.

3 Si stream est un pointeur nul, le fflush La fonction effectue cette action de vidage sur allstreams pour lesquels le comportement est défini ci-dessus.

Retours

4Le fflush La fonction définit l'indicateur d'erreur pour le flux et renvoie EOF si une erreur d'écriture se produit, sinon elle renvoie zéro.

J'ai rencontré le même problème en travaillant sur LINUX et une solution alternative à ce problème peut être que vous définissiez un caractère factice disons char dummy; et mettre un scanf() pour le scanner juste avant que votre entrée réelle ait lieu. Cela a fonctionné pour moi. J'espère que cela fonctionnera pour vous aussi.


Celui qui fonctionne toujours sous 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);
}

Vous pouvez utiliser tcdrain et tcflush pas seulement pour in/out/err fd.


Linux
  1. Le microphone Skype ne fonctionne pas sous Linux Mint 17 [Astuce rapide]

  2. Linux - La LED de verrouillage des majuscules ne fonctionne pas sur la console Linux ?

  3. Sound Ubuntu Linux 19.10 sur Hp Pavilion Aio ne fonctionne pas?

  4. R 3.5.0 ne fonctionne pas sur Ubuntu 18.04 ?

  5. Comment réparer l'achèvement des onglets ne fonctionne pas dans Ubuntu et Debian

Correction des podcasts vidéo Spotify ne fonctionnant pas sur Ubuntu Linux

Correction du clic sur le pavé tactile ne fonctionnant pas sous Linux Mint

Linux - Pourquoi USB ne fonctionne-t-il pas sous Linux alors qu'il fonctionne sous Uefi/bios ?

Linux - Le casque ne fonctionne pas Linux Mint 18 ?

Exemples de commandes pwdx sous Linux

La liaison symbolique Linux ne fonctionne pas comme prévu