Cherche equivalent de fflush(stdin) pour linux
Dosman
Messages postés
1446
Date d'inscription
Statut
Contributeur
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Dans le cadre d'un projet, je dois faire un programme assez complexe pouvant être compilé sous windows, linux et mac.
Je programme sous windows pour le moment et j'utilise fflush(stdin) pour vider le buffer de lecture, sauf que cela ne marche que sous windows...
Après de longues recherches sur le net, j'ai trouvé quelques codes sensés être équivalents mais aucun ne marchent correctement...
Voici un petit code pour présenter mon problème :
L'objectif est de remplacer le contenu de vider_buffer() par autre chose qui fasse la même chose.
J'ai déjà essayé pas mal de choses comme :
Mais ça ne marche pas...
Il faudrait que quand l'utilisateur rentre "5 5" le programme redemande la saisie.
Quelqu'un pourrait-il m'aider ?
Merci.
"Moi je dis que le plus fort entre l'hippopotame et l'éléphant, c'est encore le rhinocéros !"
Dans le cadre d'un projet, je dois faire un programme assez complexe pouvant être compilé sous windows, linux et mac.
Je programme sous windows pour le moment et j'utilise fflush(stdin) pour vider le buffer de lecture, sauf que cela ne marche que sous windows...
Après de longues recherches sur le net, j'ai trouvé quelques codes sensés être équivalents mais aucun ne marchent correctement...
Voici un petit code pour présenter mon problème :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void vider_buffer(void)
{
fflush(stdin);
}
int main(void)
{
char *buffer=calloc(100,sizeof(char));//buffer de lecture
printf("Entrez 0, 1 ou 2 : \n");
do
{
printf("Quel est votre choix ? ");
vider_buffer();//on vide le buffer de lecture
scanf("%99s",buffer);//on lit ce que l'utilisateur tape
vider_buffer();//on vide le buffer de lecture
}while(strcmp(buffer,"0")!=0 && strcmp(buffer,"1")!=0 && strcmp(buffer,"2")!=0);//tant que l'entree n'est pas correcte
printf("Bravo !\n");
return 0;
}
L'objectif est de remplacer le contenu de vider_buffer() par autre chose qui fasse la même chose.
J'ai déjà essayé pas mal de choses comme :
int c;
do c = getchar(); while ((c != EOF) && (c != '\n'));
Mais ça ne marche pas...
Il faudrait que quand l'utilisateur rentre "5 5" le programme redemande la saisie.
Quelqu'un pourrait-il m'aider ?
Merci.
"Moi je dis que le plus fort entre l'hippopotame et l'éléphant, c'est encore le rhinocéros !"
A voir également:
- Cherche equivalent de fflush(stdin) pour linux
- Équivalent coco - Accueil - Réseaux sociaux
- Equivalent coco - Accueil - Réseaux sociaux
- Equivalent wawacity - Accueil - Outils
- Equivalent begone android - Accueil - Protection
- Linux reader - Télécharger - Stockage
1 réponse
Bonjour,
Tu peux oublier fflush(stdin); et ce, même sur windows.
fflush(stdin) a un comportement indéterminé.
Pour vider correctement, le buffer clavier, il faut faire :
(ou ton code avec ta variante fera l'affaire également).
Il faut vider le buffer lorsque c'est nécessaire. Donc, il faut l'enlever avant ton scanf().
Cdlt,
Tu peux oublier fflush(stdin); et ce, même sur windows.
fflush(stdin) a un comportement indéterminé.
Pour vider correctement, le buffer clavier, il faut faire :
int c; while ( (c=getchar()) != '\n' && c != EOF );
(ou ton code avec ta variante fera l'affaire également).
Il faut vider le buffer lorsque c'est nécessaire. Donc, il faut l'enlever avant ton scanf().
Cdlt,