1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <stdio.h>
#include <string.h>
int purge(void)
{
int c;
while((c=getchar())!='\n' && c!=EOF)
{}
return (c!=EOF ? 0 : -1);
}
int clean(char *buf)
{
/* Si le \n est dans le buffer, c'est que la ligne est complète
sinon, c'est qu'elle était trop grande pour le buffer
et que le \n est toujours dans le flux. */
int ret = 0;
char * pLF = strchr(buf, '\n');
if(pLF != NULL)
{
/* \n trouvé: On tronque la chaîne pour le virer. */
*pLF = '\0';
}
else
{
/* \n est toujours dans le flux */
ret = purge();
}
return ret;
}
#define TAILLE 20
int main(void)
{
char unBuffer[TAILLE];
int unEntier;
int scanned;
/* Utilisation de purge() avec scanf() */
puts("Taper un entier:");
scanned = scanf("%d", &unEntier);
purge();
if(scanned == 1)
printf("Vous avez tape: %d\n", unEntier);
else
puts("Mauvaise saisie");
/* Utilisation de clean(): fgets(), puis clean() immédiatement après */
puts("Taper une chaîne:");
fgets(unBuffer, TAILLE, stdin);
clean(unBuffer);
printf("Vous avez tape: '%s'\n", unBuffer);
/* Utilisation de purge() tout seul comme fonction d'attente */
puts("Presser [Entree] :");
purge();
puts("Bye bye!");
return 0;
} |