fscanf
Lecture de données formatées d'un flux
Inconnue
6736 lectures
5 commentaires
5/5 (3 votes)
Ici, nous allons voir la fonction fscanf. Celle-ci se base sur la fonction scanf, relisez donc le cours correspondant si vous ne connaissez pas l'utilisation de cette fonction car j'utiliserai des notions déjà vues dans ce cours pour illustrer fscanf.
Comme nous l'avons vu dans le cours sur scanf, cette fonction permet de récupérer des données formatées sur le flux d'entrée standard (stdin. La fonction fscanf fait la même chose au détail près que nous pouvons spécifier le flux dans lequel la lecture se fera. La déclaration de cette fonction est la suivante :
La fonction renverra le nombre d'élément (et non de caractères) lus. Le deuxième argument et ceux qui le suivent servent à définir le format qui servira à récupérer la valeur des variables. Je ne ré-expliquerai pas l'utilisation du format dans ce cours, car cela a déjà été fait dans le cours sur scanf (relisez-le si nécessaire).
Le premier argument lui est nouveau, il va servir à définir le flux sur lequel la lecture s'exécutera.
Nous allons ici faire un simple programme permettant de lire un nombre contenu dans un fichier. Nous partirons du point qu'un fichier nommé nombre.txt existe déjà dans le répertoire de l'application et contient un nombre.
Ici, nous commençons par déclarer une variable nombre qui contiendra le nombre lu. Le pointeur de fichier f servira à contenir l'adresse du fichier nombre.txt ouvert en lecture grace à fopen. Une fois ce flux ouvert, nous effectuons une lecture dessus grace à fscanf. Nous passons donc %d comme format pour spécifier que nous lisons un nombre que nous plaçons dans la variable nombre. Nous affichons ensuite le contenu de la variable nombre et nous quittons le programme.
Comme vous le voyez, l'utilisation de cette fonction est très similaire à celle de la fonction scanf, donc si vous ne comprenez pas quelque chose, je vous conseille d'abord de lire l'explication sur scanf.
Comme nous l'avons vu dans le cours sur scanf, cette fonction permet de récupérer des données formatées sur le flux d'entrée standard (stdin. La fonction fscanf fait la même chose au détail près que nous pouvons spécifier le flux dans lequel la lecture se fera. La déclaration de cette fonction est la suivante :
La fonction renverra le nombre d'élément (et non de caractères) lus. Le deuxième argument et ceux qui le suivent servent à définir le format qui servira à récupérer la valeur des variables. Je ne ré-expliquerai pas l'utilisation du format dans ce cours, car cela a déjà été fait dans le cours sur scanf (relisez-le si nécessaire).
Le premier argument lui est nouveau, il va servir à définir le flux sur lequel la lecture s'exécutera.
Application
Nous allons ici faire un simple programme permettant de lire un nombre contenu dans un fichier. Nous partirons du point qu'un fichier nommé nombre.txt existe déjà dans le répertoire de l'application et contient un nombre.
Ici, nous commençons par déclarer une variable nombre qui contiendra le nombre lu. Le pointeur de fichier f servira à contenir l'adresse du fichier nombre.txt ouvert en lecture grace à fopen. Une fois ce flux ouvert, nous effectuons une lecture dessus grace à fscanf. Nous passons donc %d comme format pour spécifier que nous lisons un nombre que nous plaçons dans la variable nombre. Nous affichons ensuite le contenu de la variable nombre et nous quittons le programme.
Comme vous le voyez, l'utilisation de cette fonction est très similaire à celle de la fonction scanf, donc si vous ne comprenez pas quelque chose, je vous conseille d'abord de lire l'explication sur scanf.




5 commentaires
Yves a dit:
merci Manu pour ton dernier commentaire!! il m'a beaucoup aidé dans ce que je voulais faire :)
après vérification j'ai découvert qu'il y a juste un petit truc à éclaircir.la fonction fscan renvoi le nombre d'éléments qu'il lit.
Exemple: fscanf(fichier, " %d %d %d", &SomOr, &SomEx, &Poids) renverra la valeur 3
donc pour résumer comme tu l'as fait plus haut, la fonction fscan renvoie:
n si tout se passe bien (n>0)
0 si la donnée ne correspond pas à la directive du format
-1 lorsque la fin du fichier est atteinte
Merci :D
medali a dit:
merci
Manu a dit:
autant pour moi, je dois avoir deux mains gauches aujourd'hui et je n'ai pas réfléchi plus que ça avant de poster. Ça m'apprendra...
Manu a dit:
autant pour moi, je dois avoir deux mains gauches aujourd'hui et je n'ai pas réfléchi plus que ça avant de poster. Ça m'apprendra...
Manu a dit:
"La fonction renverra le nombre d'élément (et non de caractères) lus"
Sauf erreur de ma part, il me semble plutôt que la fonction renvoie :
1 si tout se passe bien
0 si la donnée ne correspond pas à la directive du format
-1 lorsque la fin du fichier est atteinte
Ajouter un commentaire