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ètre | Description |
|---|---|
| * | 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. |
| width | Ceci spécifie le nombre maximal de caractères à lire dans l'opération de lecture en cours. |
| modificateurs | Spé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) |
| type | Un 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 :
| Type | Entrée qualifiante | type d'argument |
|---|---|---|
| c | Caractè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 * |
| d | Entier décimal : un signe + ou - avant le nombre est facultatif. | int * |
| e,E,f,g,G | Nombre à 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.12e4 | float * |
| o | Entier octal. | int * |
| s | Chaî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 * |
| u | Entier décimal non signé. | unsigned int * |
| x,X | Entier 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 <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 = Saturdayautres extensions