Text files: write then read · Fichiers texte : écrire puis lire
Files keep data after the program ends
- A file stores data on disk, so it is still there after your program stops.
- You work with a file through a
FILE *— a pointer you get fromfopen. - In these tasks you write a file, then read it back in the same program, so everything is self-contained.
Les fichiers conservent les données après la fin du programme
- Un fichier stocke des données sur le disque, donc il est toujours là après l'arrêt de votre programme.
- Vous travaillez avec un fichier via un
FILE *— un pointeur que vous obtenez defopen. - Dans ces exercices, vous écrivez un fichier, puis le lisez à nouveau dans le même programme, donc tout est autonome.
Writing then reading a file · Écrire puis lire un fichier
A file is used in three steps: open · ouvrir it with fopen, read or write, then close · fermer it with fclose. · Un fichier est utilisé en trois étapes : ouvrez-le avec fopen, lisez ou écrivez, puis fermez-le avec fclose.
Opening and closing
fopen("data.txt", "w")opens a file for writing (it creates or empties the file).fopen("data.txt", "r")opens it for reading.- Always
fclose(f)when you are done, so the data is saved and the file is released.
Ouvrir et fermer
fopen("data.txt", "w")ouvre un fichier pour l'écriture (il crée ou vide le fichier).fopen("data.txt", "r")l'ouvre pour la lecture.- Toujours
fclose(f)quand vous avez fini, afin que les données soient sauvegardées et le fichier libéré.
Writing with fprintf
fprintfworks likeprintf, but its first argument is theFILE *.fprintf(f, "%d\n", x);writes the numberxand a newline into the filef.- Write each value on its own line so it is easy to read back.
Écrire avec fprintf
fprintffonctionne commeprintf, mais son premier argument est leFILE *.fprintf(f, "%d\n", x);écrit le nombrexet un saut de ligne dans le fichierf.- Écrivez chaque valeur sur sa propre ligne pour qu'il soit facile de la relire.
Reading with fscanf and fgets
fscanf(f, "%d", &x)reads one number; it returns1when it succeeds.fgets(buf, size, f)reads one line of text intobuf; it returnsNULLat the end.- Loop until the read fails to process the whole file.
Lire avec fscanf et fgets
fscanf(f, "%d", &x)lit un nombre ; il retourne1quand c'est réussi.fgets(buf, size, f)lit une ligne de texte dansbuf; elle retourneNULLà la fin.- Boucle jusqu'à ce que la lecture échoue pour traiter tout le fichier.
#include <stdio.h>
int main(void) {
FILE *f = fopen("nums.txt", "w");
fprintf(f, "3\n4\n");
fclose(f);
f = fopen("nums.txt", "r");
int x, total = 0;
while (fscanf(f, "%d", &x) == 1) {
total += x;
}
fclose(f);
printf("%d\n", total); // 7
return 0;
}
Common mistakes
- Check that
fopendid not returnNULLbefore reading or writing. - Always
fclosethe file when you are done.
Erreurs courantes
- Vérifiez que
fopenn'a pas retournéNULLavant de lire ou d'écrire. - Toujours
fclosele fichier quand vous avez fini.
Now you try
- These tasks are full programs: write inside
main, and Check answer tests the output. - Write the file first,
fcloseit, then open it again for reading and loop until the read fails.
À vous maintenant
- Ces exercices sont des programmes complets : écrivez à l'intérieur de
main, et Check answer teste la sortie. - Écrivez d'abord le fichier,
fclose-le, puis ouvrez-le à nouveau pour la lecture et bouclez jusqu'à ce que la lecture échoue.
In main: write the numbers 10, 20, 5, 7 (one per line) to a file, close it, then open it again and add them up with fscanf. Print the total (42). · Dans main : écrivez les nombres 10, 20, 5, 7 (un par ligne) dans un fichier, fermez-le, puis ouvrez-le à nouveau et additionnez-les avec fscanf. Imprimez le total (42).
Click Run to see the output here. · Cliquez sur Exécuter pour voir le résultat ici.
In main: write three lines of text to a file, close it, then open it again and count the lines with fgets. Print the count (3). · Dans main : écrivez trois lignes de texte dans un fichier, fermez-le, puis ouvrez-le à nouveau et comptez les lignes avec fgets. Imprimez le comptage (3).
Click Run to see the output here. · Cliquez sur Exécuter pour voir le résultat ici.