Vider STDIN sans attente d'une action
Bonjour,
Je chercher un moyen portable de vider stdin. Car nous savons tous que fflush n'est vraiment pas conseiller pour sa portabilité médiocre!
J'ai vu plusieurs choses à droite a gauche, mais elles bloque le programme. Style l'utilisation de getchar qui est bloquant.
Je ne trouve rien de convaincant :(
Quelqu'un aurait il une idée pour vider le stdin avant de demander une entrée utilisateur et sans bloquer le programme?
Merci :)
Edit: J'ai déjà essayer ceci:
Code:
1 2 3 4 5
| static void VideTampon(void) {
int c;
while((c = fgetc(stdin)) != '\n' && c != EOF) {
}
} |
Mais ça bloque aussi je ne comprend pas trop pourquoi.
En faite j'appelle ma fonction SaisieChaine:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void SaisieChaine(const char * prompt, char * var, const int taille) {
int nb;
VideTampon();
printf("%s", prompt);
fgets(var, taille, stdin);
nb = strlen(var);
var[nb-1] = '\0';
} |
Comme ceci:
Code:
1 2 3 4 5
| SaisieChaine("Nom: ", tampon1, sizeof tampon1);
SaisieChaine("Prenom: ", tampon2, sizeof tampon2);
SaisieChaine("Tel: ", tampon3, sizeof tampon3); |
Et donc ca m'affiche Nom: je tape le nom et la c'est bloquant :(
Je suis obligé d'appuyer sur entrée pour qu'il me demande Prenom: