Fonctions de bibliothèque C -sscanf()

Bibliothèque standard C - <stdio.h>

Description

Fonctions de bibliothèque Cint sscanf(const char *str, const char *format, ...)Lit une 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ètre

  • str-- Il s'agit d'une chaîne C à partir de laquelle la fonction récupère des données.
  • format-- Il s'agit d'une chaîne C qui contient un ou plusieurs des éléments suivants :caractères blancs, caractères non blancsetspécificateurs de format。
    Le spécificateur de format a la forme[=%[*][width][modifiers]type=], avec l'explication détaillée comme suit :
ParamètreDescription
*Il s'agit d'un astérisque facultatif, indiquant que les données sont lues depuis le flux mais peuvent être ignorées, c'est-à-dire qu'elles ne sont pas stockées dans l'argument correspondant.
widthCeci spécifie le nombre maximal de caractères à lire dans l'opération de lecture en cours.
modificateursSpécifie une taille différente de celle d'un entier (pour d, i et n), d'un entier non signé (pour o, u et x) ou d'un nombre à virgule flottante (pour e, f et g) pour les données pointées par l'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)
typeUn caractère spécifiant le type de données à lire et la façon dont elles sont lues. Voir le tableau suivant pour plus de détails.

Spécificateurs de type de sscanf :

TypeEntrée qualifiantetype d'argument
cCaractère unique : lit le caractère suivant. Si une largeur autre que 1 est spécifiée, la fonction lit width caractères et les stocke dans les positions successives du tableau passé en argument. Aucun caractère nul n'est ajouté à la fin.char *
dEntier décimal : un signe + ou - avant le nombre est facultatif.int *
e,E,f,g,GNombre à virgule flottante : contient un point décimal, un signe initial facultatif + ou -, un caractère final facultatif e ou E, et des chiffres décimaux. Deux exemples valides sont -732.103 et 7.12e4float *
oEntier octal.int *
sChaîne. Lit les caractères successifs jusqu'à ce qu'un caractère d'espacement soit rencontré (les caractères d'espacement peuvent être l'espace, le saut de ligne et la tabulation).char *
uEntier décimal non signé.unsigned int *
x,XEntier hexadécimal.int *

Arguments supplémentaires-- Cette fonction accepte une série de pointeurs comme arguments supplémentaires, chacun pointant vers un objet dont le type est spécifié par la balise % correspondante dans la chaîne de format. Les arguments sont dans le même ordre que les balises %.

Pour chaque spécificateur de format dans la chaîne de format qui récupère des données, un paramètre supplémentaire doit être spécifié. Si vous souhaitez stocker le résultat de l'opération sscanf dans une variable ordinaire, vous devez placer l'opérateur de référence (&) avant l'identifiant, par exemple :

int n;
sscanf (str,"%d",&n);

Valeur de retour

En cas de succès, la fonction renvoie le nombre de correspondances et d'affectations réussies. Si la fin du fichier est atteinte ou qu'une erreur de lecture se produit, elle renvoie EOF.

Exemple

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

Exemple

#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, ce qui produira le résultat suivant :

March 25, 1989 = Saturday

Bibliothèque standard C - <stdio.h>

autres extensions