wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
| Défini dans l'en-tête <wchar.h>
|
||
int wscanf( const wchar_t* format, ... );
|
(1) | (depuis C95) (jusqu'à C99) |
int wscanf( const wchar_t* restrict format, ... );
|
(depuis C99) | |
int fwscanf( FILE* stream, const wchar_t* format, ... );
|
(2) | (depuis C95) (jusqu'à C99) |
int fwscanf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(depuis C99) | |
int swscanf( const wchar_t* buffer, const wchar_t* format, ... );
|
(3) | (depuis C95) (jusqu'à C99) |
int swscanf( const wchar_t* restrict buffer,
const wchar_t* restrict format, ... );
|
(depuis C99) | |
int wscanf_s( const wchar_t* restrict format, ...);
|
(4) | (depuis C11) |
int fwscanf_s( FILE* restrict stream,
const wchar_t* restrict format, ...);
|
(5) | (depuis C11) |
int swscanf_s( const wchar_t* restrict s,
const wchar_t* restrict format, ...);
|
(6) | (depuis C11) |
Lit les données d'une variété de sources, les interprète selon format et stocke les résultats dans les emplacements donnés.
stream.
buffer. Atteindre la fin de la chaîne équivaut à atteindre la condition de fin de fichier pour fwscanf%c, %s et %[ attendent chacun deux arguments (le pointeur habituel et une valeur de type rsize_t indiquant la taille du tableau récepteur, qui peut être 1 lors de la lecture avec un %lc dans un seul caractère large) et sauf que les erreurs suivantes sont détectées à l'exécution et appellent la fonction gestionnaire de contrainte actuellement installée :
- l'un des arguments de type pointeur est un pointeur nul
format,streamoubufferest un pointeur nul- le nombre de caractères qui seraient écrits par
%c,%sou%[, plus le caractère nul de terminaison, dépasserait le second argument (rsize_t) fourni pour chacun de ces spécificateurs de conversion - éventuellement, toute autre erreur détectable, comme un spécificateur de conversion inconnu
wscanf_s, fwscanf_s et swscanf_s ne sont garanties disponibles que si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ comme la constante entière 1 avant d'inclure <wchar.h>.
Paramètres
| stream | - | flux de fichier d'entrée à lire |
| buffer | - | pointeur vers une chaîne large terminée par null à lire |
| format | - | pointeur vers une chaîne large terminée par null spécifiant comment lire l'entrée |
| ... | - | arguments récepteurs. |
La chaîne format se compose de
- caractères larges non blancs, sauf
%: chaque tel caractère dans la chaîne de format consomme exactement un caractère identique du flux d'entrée, ou provoque l'échec de la fonction si le caractère suivant du flux n'est pas égal. - caractères blancs : tout caractère blanc unique dans la chaîne de format consomme tous les caractères blancs consécutifs disponibles de l'entrée (déterminé comme si en appelant iswspace en boucle). Notez qu'il n'y a pas de différence entre
"\n"," ","\t\t"ou d'autres blancs dans la chaîne de format. - spécifications de conversion. Chaque spécification de conversion a le format suivant :
- caractère d'introduction
%.
- caractère d'introduction
- (facultatif) caractère de suppression d'affectation
*. Si cette option est présente, la fonction n'affecte pas le résultat de la conversion à un argument récepteur.
- (facultatif) caractère de suppression d'affectation
- (facultatif) nombre entier (supérieur à zéro) qui spécifie la largeur de champ maximale, c'est-à-dire le nombre maximal de caractères que la fonction est autorisée à consommer lors de la conversion spécifiée par la spécification de conversion courante. Notez que
%set%[peuvent entraîner un débordement de tampon si la largeur n'est pas fournie.
- (facultatif) nombre entier (supérieur à zéro) qui spécifie la largeur de champ maximale, c'est-à-dire le nombre maximal de caractères que la fonction est autorisée à consommer lors de la conversion spécifiée par la spécification de conversion courante. Notez que
- (facultatif) modificateur de longueur qui spécifie la taille de l'argument récepteur, c'est-à-dire le type de destination réel. Cela affecte la précision de la conversion et les règles de débordement. Le type de destination par défaut est différent pour chaque type de conversion (voir tableau ci-dessous).
- spécificateur de format de conversion.
Les spécificateurs de format suivants sont disponibles :
| Conversion spécificateur |
Explication | Type d'argument attendu | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Modificateur de longueur → | hh
|
h
|
aucun | l
|
ll
|
j
|
z
|
t
|
L
| |
| Disponible uniquement depuis C99 → | Oui | Oui | Oui | Oui | Oui | |||||
%
|
Correspond au littéral
%.
|
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
Correspond à un caractère ou une séquence de caractères.
|
N/A | N/A | char* |
wchar_t* |
N/A | N/A | N/A | N/A | N/A |
s
|
Correspond à une séquence de caractères non blancs (une chaîne).
| |||||||||
[set ]
|
Correspond à une séquence non vide de caractères de l'ensemble de caractères.
| |||||||||
d
|
Correspond à un entier décimal.
|
signed char* ou unsigned char* |
signed short* ou unsigned short* |
signed int* ou unsigned int* |
signed long* ou unsigned long* |
signed long long* ou unsigned long long* |
intmax_t* ou uintmax_t* |
size_t* |
ptrdiff_t* |
N/A |
b (C23)
|
Correspond à un entier binaire non signé.
| |||||||||
i
|
Correspond à un entier.
| |||||||||
u
|
Correspond à un entier décimal non signé.
| |||||||||
o
|
Correspond à un entier octal non signé.
| |||||||||
xX
|
Correspond à un entier hexadécimal non signé.
| |||||||||
n
|
Retourne le nombre de caractères lus jusqu'à présent.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
Correspond à un nombre à virgule flottante.
|
N/A | N/A | float* |
double* |
N/A | N/A | N/A | N/A | long double* |
p
|
Correspond à une séquence de caractères définie par l'implémentation définissant un pointeur.
|
N/A | N/A | void** |
N/A | N/A | N/A | N/A | N/A | N/A |
| Notes | ||||||||||
|
Pour chaque spécificateur de conversion autre que À l'exception du spécificateur Tous les spécificateurs de conversion autres que Si le modificateur de longueur Les spécificateurs de conversion Les spécifications de conversion correctes pour les types entiers à largeur fixe (int8_t, etc.) sont définies dans l'en-tête <inttypes.h> (bien que SCNdMAX, SCNuMAX, etc. soient synonymes de Il y a un point de séquence après l'action de chaque spécificateur de conversion ; cela permet de stocker plusieurs champs dans la même variable « puits ». Lors de l'analyse d'une valeur à virgule flottante incomplète qui se termine par l'exposant sans chiffres, comme l'analyse de Si une spécification de conversion est invalide, le comportement est indéfini. | ||||||||||
Valeur de retour
Exemple
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#define NUM_VARS 3
#define ERR_READ 2
#define ERR_WRITE 3
int main(void)
{
wchar_t state[64];
wchar_t capital[64];
unsigned int population = 0;
int elevation = 0;
int age = 0;
float pi = 0;
#if INTERACTIVE_MODE
wprintf(L"Enter state, age, and pi value: ");
if (wscanf(L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#else
wchar_t* input = L"California 170 3.141592";
if (swscanf(input, L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#endif
wprintf(L"State: %ls\nAge : %d years\nPi : %.5f\n\n", state, age, pi);
FILE* fp = tmpfile();
if (fp)
{
// write some data to temp file
if (!fwprintf(fp, L"Mississippi Jackson 420000 807"))
{
fprintf(stderr, "Error writing to file.\n");
fclose(fp);
return ERR_WRITE;
}
// rewind file pointer
rewind(fp);
// read data into variables
fwscanf(fp, L"%ls%ls%u%d", state, capital, &population, &elevation);
wprintf(L"State : %ls\nCapital: %ls\nJackson population (in 2020): %u\n"
L"Highest elevation: %dft\n",
state, capital, population, elevation);
fclose(fp);
}
}
Sortie possible :
State: California
Age : 170 years
Pi : 3.14159
State : Mississippi
Capital: Jackson
Jackson population (in 2020): 420000
Highest elevation: 807ft
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.29.2.2 La fonction fwscanf (p : À DÉTERMINER)
- 7.29.2.4 La fonction swscanf (p : À DÉTERMINER)
- 7.29.2.12 La fonction wscanf (p : À DÉTERMINER)
- K.3.9.1.2 La fonction fwscanf_s (p : À DÉTERMINER)
- K.3.9.1.5 La fonction swscanf_s (p : À DÉTERMINER)
- K.3.9.1.14 La fonction wscanf_s (p : À DÉTERMINER)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.29.2.2 La fonction fwscanf (p : À DÉTERMINER)
- 7.29.2.4 La fonction swscanf (p : À DÉTERMINER)
- 7.29.2.12 La fonction wscanf (p : À DÉTERMINER)
- K.3.9.1.2 La fonction fwscanf_s (p : À DÉTERMINER)
- K.3.9.1.5 La fonction swscanf_s (p : À DÉTERMINER)
- K.3.9.1.14 La fonction wscanf_s (p : À DÉTERMINER)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.29.2.2 La fonction fwscanf (p : 410-416)
- 7.29.2.4 La fonction swscanf (p : 417)
- 7.29.2.12 La fonction wscanf (p : 421)
- K.3.9.1.2 La fonction fwscanf_s (p : 628-629)
- K.3.9.1.5 La fonction swscanf_s (p : 631)
- K.3.9.1.14 La fonction wscanf_s (p : 638)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.24.2.2 La fonction fwscanf (p : 356-362)
- 7.24.2.4 La fonction swscanf (p : 362)
- 7.24.2.12 La fonction wscanf (p : 366-367)
Voir aussi
(C99)(C99)(C99)(C11)(C11)(C11) |
lit une entrée formatée de caractères larges depuis stdin, un flux de fichier ou un tampon en utilisant une liste d'arguments variables (fonction) |
Documentation C++ pour wscanf, fwscanf, swscanf
| |