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 73 74 75 76
| #include <stdio.h>
#include <string.h>
/* -tc- elimine le caractere de fin de ligne saisi par fgets() et fait le menage
dans le tampon du flux entrant en cas de saisie tronquee */
static void fclean(char *buffer, FILE *fp)
{
if (buffer != NULL && fp != NULL)
{
char *pc = strchr(buffer, '\n');
if (pc != NULL)
{
*pc = 0;
}
else
{
int c;
while ((c = fgetc(fp)) != '\n' && c != EOF)
{
}
}
}
}
/* -tc- main retourne un entier de type int, TOUJOURS! */
int main (void)
{
/* -tc- c'est une bonne pratique d'initialiser les tableaux de caracteres */
char file[80] = "";
char line[255] = "";
FILE *fp = NULL;
int nb_col = 0;
int nb_col_max = 0;
int nb_ligne = 0;
printf("Fichier: ");
/* -tc- il est necessaire ici de forcer l'affichage avec fflush() */
fflush(stdout);
fgets(file, sizeof file, stdin);
fclean(file, stdin);
fp = fopen(file, "r");
if (fp == NULL)
{
printf("Fichier introuvable\n");
}
else
{
/* -tc- lorsque la fin de fichier est rencontree ou qu'une erreur de
lecture intervient, fgets() renvoie NULL */
while (fgets(line, sizeof line, fp) != NULL)
{
fclean(line, fp);
printf("%s\n", line);
nb_ligne = nb_ligne + 1 ;
nb_col = strlen(line);
if (nb_col > nb_col_max)
{
nb_col_max = nb_col;
}
}
printf("Le nombre de ligne est %d\n", nb_ligne);
printf("Le nombre de colonne est %d\n", nb_col_max);
/* -tc- c'est un bonne pratique d'affecter la valeur NULL a fp une fois
le fichier ferme */
fclose(fp), fp = NULL;
}
/* -tc- les 3 valeurs portables que peut retourner main() sont 0,
EXIT_SUCCESS et EXIT_FAILURE (inclure stdlib.h pour les 2 dernières */
return 0;
} |
Partager