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
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int clean_fgets(char const *s_buffer, FILE *fp);
int main(void)
{
char s_chaine[20];
printf("Entrez une chaîne: ");
fflush(stdout);
fgets(s_chaine, sizeof s_chaine, stdin);
if (clean_fgets(s_chaine, stdin) != 0)
{
fprintf(stderr, "WARNING: L'entrée est trop longue et a été tronquée!\n");
}
return EXIT_SUCCESS;
}
/**
* Teste si la ligne du fichier ou l'entrée utilisateur à partir du flux d'entrée
* standard n'a pas été tronquée par fgets(). Si la saisie est incomplète, le
* reste de la ligne (si on travail sur un fichier) est ignoré ou le tampon du
* flux d'entrée standard (si on travail sur stdin) est purgé, et un code
* d'erreur est retourné.
*
* Si la saisie est correcte, le caractère de nouvelle ligne '\n' placé dans
* le tampon par fgets() et effacé.
*
* @param s_buffer tampon contenant la saisie de fgets()
* @param fp pointeur sur le fichier considéré, ou sur le flux d'entrée standard
* @return code d'erreur dont la veleur est 1 en cas de saisie tronquée, et 0
* en cas de saisie correcte
*/
static int clean_fgets(char const *s_buffer, FILE *fp)
{
int err = 0; /* error code */
char *pc = strchr(s_buffer,'\n');
if (pc != NULL) /* input OK */
{
*pc = '\0';
}
else /* input has been truncated */
{
int c;
while ((c = fgetc(fp)) != '\n' && c != EOF)
{
/* We ignore all the remaining characters */
continue;
}
/* we report that an error has been encountered */
err = 1;
}
return err;
} |
Partager