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
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fclean(char *buffer, FILE *stream);
int main(void)
{
int n = 0;
char buffer[15] = "";
char *p_end = NULL;
do
{
printf("Entrez un entier: ");
fflush(stdout);
p_end = NULL;
if (fgets(buffer, sizeof buffer, stdin) != NULL)
{
fclean(buffer, stdin);
n = strtol(buffer, &p_end, 0);
}
}
while (p_end == NULL || *p_end != 0);
printf("Vous avez saisi l'entier %d!\n", n);
return EXIT_SUCCESS;
}
/* Elimine le caractere de fin de ligne terminant la saisie et vide le tampon
du flux d'entree stream si necessaire */
static void fclean(char *buffer, FILE *stream)
{
char *pc = strchr(buffer, '\n');
if (pc != NULL)
{ /* Le caractere de fin de ligne a ete trouve. La saisie est complete */
*pc = 0;
}
else
{ /* La saisie a ete tronquee. On vide le tampon du flux stream */
/* Important: la fonction fgetc(stream) retourne un entier de type int,
pas de type char. */
int c;
while ((c = fgetc(stream)) != '\n' && c != EOF)
{
/* On ignore les caractere presents dans le tampon */
}
}
} |