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 61 62 63 64 65 66 67 68 69 70 71 72
| #include <stdio.h>
#include <ctype.h>
enum M_IOErrors {
M_IO_OK, /* OK */
M_IO_EOF, /* La fin de fichier a ete rencontree */
M_IO_EOL, /* Un caractre de fin de ligne a ete rencontre */
M_IO_INVALID_ARG_ERR, /* Argument invaide passe a la fonction */
M_IO_LENGTH_ERR /* La saisie a ete tronquee */
};
int
fget_word(char *buffer, size_t size, FILE *fp)
{
int err = M_IO_OK;
/* -tc- On teste la validite des arguments */
if (buffer != NULL && size > (size_t) 1 && fp != NULL)
{
size_t i = 0;
int c = 0;
while (i < size - 1 && (c = fgetc(fp)) != EOF && isspace(c) == 0)
{
buffer[i] = c;
i++;
}
buffer[i] = 0;
if (i == size - 1 && isspace(c) == 0 && c != EOF)
{
err = M_IO_LENGTH_ERR;
while ((c = fgetc(fp)) != EOF && isspace(c) == 0)
{
}
}
else if (c == EOF && i == 0)
{
err = M_IO_EOF;
}
else if (c == '\n')
{
err = M_IO_EOL;
}
}
else
{
/* -tc- Erreur: argument invalide */
err = M_IO_INVALID_ARG_ERR;
}
return err;
}
int
main(void)
{
char mot[20] = "";
int err = M_IO_OK;
printf("Saisir une phrase: ");
fflush(stdout);
do
{
err = fget_word(mot, sizeof mot, stdin);
printf("%s\n", mot);
}
while (err != M_IO_EOL);
return 0;
} |
Partager