si "fflush" force l'écriture de tous les buffers, il s'agit implicitement des buffers d'écriture. Or, stdin n'est pas un buffer d'écriture (incontournable vérité ;-).
Et comme l'instruction "fflush(stdin)" ne provoque pas d'erreur ni de warning, tu n'auras jamais de problème si tu l'utilises. Est ce que cette utilisation a un sens, c'est un autre soucis.
Maintenant, essaye donc le code suivant:
#include <stdio.h>
#define SIZE (20)
int main()
{
char chaine[SIZE + 1];
long nb=0;
do {
printf("Entre une chaîne: "); fflush(stdout);
fgets(chaine, SIZE + 1, stdin);
printf("Entre un nombre: "); fflush(stdout);
scanf("%ld", &nb);
printf("Ta chaine est [%s] et ton nombre est [%ld]\n", chaine, nb);
}while (strncmp(chaine, "EOT", 3) != 0);
return(0);
}
Tu verras que ton "fgets" n'attendra ta frappe qu'un tour sur 2. L'autre tour, il récupèrera une merde résiduelle de "stdin", sauf si tu vides stdin avant la saisie
Poste le Sunday 8 August 2004 15:06:57