Leçon 51 : E/S de fichiers Partie 5 : E/S formatées (fprintf, fscanf)
Ces fonctions sont les équivalents pour les flux de fichiers de printf et scanf. Elles permettent de lire et d'écrire facilement des données formatées (entiers, flottants, chaînes formatées).
Écrire des données formatées : fprintf()
Écrit une sortie formatée dans le flux spécifié.
Syntaxe : int fprintf(FILE *flux, const char *format, ...);
c #include <stdio.h>
struct Donnee { int id; float montant; }; struct Donnee enregistrement = {123, 50.75};
FILE *fp = fopen("enregistrements.txt", "w");
if (fp != NULL) { // Écriture de données structurées séparées par des virgules fprintf(fp, "ID : %d, Montant : %.2f\n", enregistrement.id, enregistrement.montant); fclose(fp); }
Lire des données formatées : fscanf()
Lit une entrée formatée depuis le flux spécifié.
Syntaxe : int fscanf(FILE *flux, const char *format, ...);
Rappel crucial : Tout comme scanf, fscanf nécessite les adresses (&) des variables pour stocker les données.
c FILE *fp = fopen("enregistrements.txt", "r"); int id_lu; float montant_lu;
if (fp != NULL) { // Le format doit correspondre exactement (ex: ignorer 'ID : ', la virgule, etc.) int elements_lus = fscanf(fp, "ID : %d, Montant : %f\n", &id_lu, &montant_lu);
if (elements_lus == 2) {
printf("ID %d et Montant %.2f lus avec succès\n", id_lu, montant_lu);
}
fclose(fp);
}
Limitation : fscanf est sensible aux changements de format (ex: espaces supplémentaires ou séparateurs manquants) et gère mal les lignes contenant des chaînes avec des espaces. Elle est donc moins robuste que fgets pour la lecture de fichiers texte généraux.