17.4.2 Lecture dans un fichier texte par fscanf (déconseillé)

Icône de l'outil pédagogique Lecture dans un fichier texte par fscanf (déconseillé)

Conseil (rappel) : on préfèrera l'utilisation de fgets, suivie éventuellement par sscanf, à celle de fscanf (plus délicate). A moins d'avoir absolument besoin de fscanf, vous pouvez donc passer au paragraphe suivant et ses exemples.

Pour la lecture avec fscanf, une précaution supplémentaire s'impose : il faut éviter de lire au‐delà de la limite du fichier (même si on croit en connaître la taille !).

On utilise pour cela la fonction feof (End Of File), qui renvoie 0 tant que la fin du fichier n'est pas atteinte. Cette fonction permet de lire un fichier dont on ignore la taille.

Exemple 103 : Lecture du fichier texte précédent avec fscanf (déconseillé)

Pour fscanf comme pour scanf, si une chaîne de caractères figure entre les codes formats, elle doit être retrouvée très précisément à la lecture, sous peine de mauvais fonctionnement.

On peut aussi indiquer à scanf ou fscanf que des éléments non significatifs doivent être ignorés à la lecture grâce au symbole * placé entre le % et la lettre du format. Cela permet de « sauter » les chaînes de caractères non désirées, sans les mémoriser.

Par exemple, la lecture d'une ligne du fichier précédent, toujours de la forme element 6 : 123, devient si on veut mémoriser seulement la dernière valeur (123 ici) :

fscanf( fic, "%*s%*d%*s%hd", &tab[i] );

Rappelons que les espaces, les tabulations et les passages à la ligne sont considérés comme des séparateurs par scanf et fscanf, et qu'ils sont automatiquement sautés lors de la lecture d'une valeur numérique ou d'une chaîne de caractères (mais pas d'un caractère !!).
Remarquez l'utilisation de la fonction feof dans l'exemple précédent : feof(fic) vaut 0 (faux) si la fin de fichier n’est pas atteinte. La lecture du fichier peut aussi s'écrire :