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:
Mais ça bloque aussi je ne comprend pas trop pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 static void VideTampon(void) { int c; while((c = fgetc(stdin)) != '\n' && c != EOF) { } }
En faite j'appelle ma fonction SaisieChaine:
Comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'; }
Et donc ca m'affiche Nom: je tape le nom et la c'est bloquant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SaisieChaine("Nom: ", tampon1, sizeof tampon1); SaisieChaine("Prenom: ", tampon2, sizeof tampon2); SaisieChaine("Tel: ", tampon3, sizeof tampon3);
Je suis obligé d'appuyer sur entrée pour qu'il me demande Prenom:
Partager