Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
SCANF
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- CONVERSIONS
- VALEUR RENVOYÉE
- VOIR AUSSI
- CONFORMITÉ
- BOGUES
- TRADUCTION
NOM
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - Entrées formatées
SYNOPSIS
#include <stdio.h>
int scanf (const char * format, ...);
int fscanf (FILE * stream, const char * format, ...);
int sscanf (const char * str, const char * format, ...);
#include <stdarg.h>
int vscanf (const char * format, va_list ap);
int vsscanf (const char * str, const char * format, va_list ap);
int vfscanf (FILE * stream, const char * format, va_list ap);
DESCRIPTION
Les fonctions de la famille scanf() analysent leurs entrées conformément
au format décrit plus bas. Ce format peut contenir des indicateurs de
conversion. Les résultats des conversions, s'il y en a, sont stockés dans
des endroits pointés par des arguments pointeurs qui suivent le
format. Chaque argument pointeur doit être du type approprié pour la
valeur retournée par la spécification de conversion correspondante.
Si le nombre de spécifications de conversion dans format excède le nombre
d'arguments pointeur, le résultat est indéterminé. Si le nombre
d'arguments pointeur excède le nombre de spécifications de conversion,
les arguments pointeur en excès sont évalués mais ignorés.
La fonction scanf() lit ses données depuis le flux d'entrée standard
stdin, fscanf() lit ses entrées depuis le flux pointé par stream,
et sscanf() lit ses entrées dans la chaîne de caractères pointée par
str.
La fonction vfscanf() est analogue à vfprintf(3) et lit ses
arguments depuis le flux pointé par stream en utilisant une liste
variable d'arguments pointeurs, voir stdarg(3). La fonction vscanf()
examine l'entrée standard en utilisant une liste variable d'arguments
pointeurs et la fonction vsscanf() examine une chaîne. Elles sont
respectivement analogues aux fonctions vprintf() et vsprintf().
La chaîne format consiste en une séquence de directives qui décrit
comme traiter la séquence des caractères d'entrée. Si le traitement des
directives échoue, aucune autre entrée n'est lue et scanf() revient. Un
« échec » peut être soit un échec d'entrée signifiant que les
caractères d'entrée ne sont pas disponibles, soit un échec de
correspondance signifiant que l'entrée n'est pas appropriée (voir plus
loin)
Une directive peut être :
- *
-
Une séquence de caractères blancs (espace, tabulation, nouvelle ligne, etc. ; voir isspace(3)). Cette directive correspond à un nombre quelconque de
caractères blancs, y compris aucun, dans l'entrée.
- *
-
Un caractère ordinaire (c'est-à-dire autre qu'un caractère blanc et que le
caractère « % ». Ce caractère doit exactement correspondre au caractère
suivant de l'entrée.
- *
-
Une spécification de conversion qui débute avec le caractère « % ». Une
séquence de caractères de l'entrée est convertie conformément à la
spécification et le résultat est placé dans l'argument pointeur
correspondant. Si l'élément suivant de l'entrée ne correspond pas à la
spécification de conversion, la conversion échoue --- c'est un échec de
correspondance.
Chaque spécification de conversion dans format commence avec soit le
caractère « % », soit la séquence de caractères « %n$ » (voir
plus loin pour la distinction) suivie par :
- *
-
Un caractère d'affectation-suppression optionnel « * » : scanf() lit
l'entrée comme indiqué par la spécification de conversion mais ne tient pas
compte de l'entrée. Aucun argument pointeur n'est nécessaire et cette
spécification n'est pas comptabilisée dans le nombre d'affectations réussies
renvoyé par scanf().
- *
-
Un caractère « a » optionnel. Il est utilisé dans les conversions de
chaînes et soulage l'appelant du besoin d'allouer un tampon correspondant
pour conserver l'entrée : à la place, scanf() alloue un tampon de
taille suffisante et affecte l'adresse de ce tampon à l'argument pointeur
correspondant qui doit être un pointeur vers une variable char * (il
n'est pas nécessaire que cette variable soit initialisée avant
l'appel). L'appelant doit par la suite libérer (free(3)) ce tampon
lorsqu'il devient inutile. Ceci est une extension GNU ; C99 emploie le
caractère « a » comme un spécificateur de conversion (il peut également
être utilisé en tant que tel dans l'implémentation GNU).
- *
-
Un entier décimal optionnel qui indique la taille maximum du champ. La
lecture des caractères s'arrête soit lorsque ce maximum est atteint, soit
lorsque on trouve un caractère qui ne correspond pas, celui qui arrive le
premier. La plupart des conversions abandonnent les caractères blancs de
tête (les exceptions sont notées plus loin), et ces caractère abandonnés
n'entrent pas en compte dans la taille maximale du champ. Les conversions
d'entrée de chaînes stocke un octet de terminaison nul («
|