Fonction de bibliothèque C - fscanf ()

La description

La fonction de bibliothèque C int fscanf(FILE *stream, const char *format, ...) lit l'entrée formatée à partir d'un flux.

Déclaration

Voici la déclaration de la fonction fscanf ().

int fscanf(FILE *stream, const char *format, ...)

Paramètres

  • stream - Il s'agit du pointeur vers un objet FILE qui identifie le flux.

  • format- Il s'agit de la chaîne C qui contient un ou plusieurs des éléments suivants - Caractère d'espacement, caractère sans espace et spécificateurs de format . Un spécificateur de format sera comme[=%[*][width][modifiers]type=], qui est expliqué ci-dessous -

N ° Sr. Argument et description
1

*

C'est un astérisque de départ facultatif qui indique que les données doivent être lues à partir du flux mais ignorées, c'est-à-dire qu'elles ne sont pas stockées dans l'argument correspondant.

2

width

Ceci spécifie le nombre maximum de caractères à lire dans l'opération de lecture en cours.

3

modifiers

Spécifie une taille différente de int (dans le cas de d, i et n), unsigned int (dans le cas de o, u et x) ou float (dans le cas de e, f et g) pour les données pointées par le argument supplémentaire correspondant: h: short int (pour d, i et n), ou unsigned short int (pour o, u et x) l: long int (pour d, i et n), ou unsigned long int (pour o, u et x), ou double (pour e, f et g) L: long double (pour e, f et g)

4

type

Un caractère spécifiant le type de données à lire et la manière dont elles devraient être lues. Voir le tableau suivant.

spécificateurs de type fscanf

type Contribution admissible Type d'argument
c Caractère unique: lit le caractère suivant. Si une largeur différente de 1 est spécifiée, la fonction lit les caractères de largeur et les stocke dans les emplacements successifs du tableau passé en argument. Aucun caractère nul n'est ajouté à la fin. char *
Entier décimal: nombre éventuellement précédé d'un signe + ou - int *
e, E, f, g, G Virgule flottante: nombre décimal contenant un point décimal, éventuellement précédé d'un signe + ou - et éventuellement suivi du caractère e ou E et d'un nombre décimal. Deux exemples d'entrées valides sont -732.103 et 7.12e4 flotteur *
o Entier octal: int *
s Chaîne de caractères. Cela lira les caractères suivants jusqu'à ce qu'un espace soit trouvé (les caractères d'espacement sont considérés comme vides, nouvelle ligne et tabulation). char *
u Entier décimal non signé. entier non signé *
x, X Entier hexadécimal int *
  • additional arguments- Selon la chaîne de format, la fonction peut s'attendre à une séquence d'arguments supplémentaires, chacun contenant une valeur à insérer à la place de chaque% -tag spécifié dans le paramètre de format (le cas échéant). Il doit y avoir le même nombre de ces arguments que le nombre de% -tags qui attendent une valeur.

Valeur de retour

Cette fonction renvoie le nombre d'éléments d'entrée mis en correspondance et attribués avec succès, qui peut être inférieur à celui prévu, voire zéro en cas d'échec de la correspondance précoce.

Exemple

L'exemple suivant montre l'utilisation de la fonction fscanf ().

#include <stdio.h>
#include <stdlib.h>


int main () {
   char str1[10], str2[10], str3[10];
   int year;
   FILE * fp;

   fp = fopen ("file.txt", "w+");
   fputs("We are in 2012", fp);
   
   rewind(fp);
   fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
   
   printf("Read String1 |%s|\n", str1 );
   printf("Read String2 |%s|\n", str2 );
   printf("Read String3 |%s|\n", str3 );
   printf("Read Integer |%d|\n", year );

   fclose(fp);
   
   return(0);
}

Compilons et exécutons le programme ci-dessus qui produira le résultat suivant -

Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2012|