Fonction de bibliothèque C - sscanf ()

La description

La fonction de bibliothèque C int sscanf(const char *str, const char *format, ...) lit l'entrée formatée à partir d'une chaîne.

Déclaration

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

int sscanf(const char *str, const char *format, ...)

Paramètres

  • str - Il s'agit de la chaîne C que la fonction traite comme source pour récupérer les données.

  • format- Il s'agit de la chaîne C qui contient un ou plusieurs des éléments suivants: caractère d'espacement, caractère non-espace et spécificateurs de format

    Un spécificateur de format suit ce prototype: [=% [*] [width] [modifiers] type =]

N ° Sr. Argument et description
1

*

Il s'agit d'un astérisque de départ optionnel, 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 *
  • other arguments - Cette fonction attend une séquence de pointeurs comme arguments supplémentaires, chacun pointant vers un objet du type spécifié par leur% -tag correspondant dans la chaîne de format, dans le même ordre.

    Pour chaque spécificateur de format dans la chaîne de format qui récupère les données, un argument supplémentaire doit être spécifié. Si vous souhaitez stocker le résultat d'une opération sscanf sur une variable régulière, vous devez faire précéder son identifiant de l'opérateur de référence, c'est-à-dire une esperluette (&), comme: int n; sscanf (chaîne, "% d", & n);

Valeur de retour

En cas de succès, la fonction renvoie le nombre de variables remplies. Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.

Exemple

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

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

int main () {
   int day, year;
   char weekday[20], month[20], dtm[100];

   strcpy( dtm, "Saturday March 25 1989" );
   sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );

   printf("%s %d, %d = %s\n", month, day, year, weekday );
    
   return(0);
}

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

March 25, 1989 = Saturday