scanf, _scanf_l, wscanf, _wscanf_l
Lit les données mises en forme à partir du flux d'entrée standard. Des versions plus sécurisées de ces fonctions sont disponibles ; consultez scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.
int scanf(
const char *format [,
argument]...
);
int _scanf_l(
const char *format,
locale_t locale [,
argument]...
);
int wscanf(
const wchar_t *format [,
argument]...
);
int _wscanf_l(
const wchar_t *format,
locale_t locale [,
argument]...
);
Paramètres
format
Chaîne de contrôle du format.argument
Arguments facultatifs.locale
Paramètres régionaux à utiliser.
Valeur de retour
Retourne le nombre de champs convertis et assignés avec succès ; la valeur de retour n'inclut pas les champs qui ont été lus mais non assignés. La valeur de retour 0 indique qu'aucun champ n'a été assigné.
Si format est un pointeur NULL, le gestionnaire de paramètres non valides est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent EOF et définissent errno avec la valeur EINVAL.
Pour plus d'informations sur ces codes d'erreur et autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.
Notes
La fonction scanf lit les données à partir du flux d'entrée standard stdin et les écrit dans l'emplacement indiqué par argument. Chaque argument doit être un pointeur vers une variable dont le type correspond à un spécificateur de type dans format. Si la copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.
Note de sécurité |
---|
Lorsque vous lisez une chaîne avec scanf, spécifiez toujours une largeur pour le format %s (par exemple, "%32s" au lieu de "%s") ; sinon, l'entrée mal mise en forme peut facilement provoquer un dépassement de mémoire tampon.Sinon, envisagez d'utiliser scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ou fgets. |
wscanf est une version à caractères larges de scanf; l'argument format vers wscanf est une chaîne à caractères larges. wscanf et scanf se comportent de la même façon si le flux est ouvert en mode ANSI. scanf ne prend actuellement pas en charge la saisie à partir d'un flux d'UNICODE.
Les versions de ces fonctions avec le suffixe _l sont identiques, sauf qu'elles utilisent les paramètres régionaux passés au lieu des paramètres régionaux du thread actuel.
Mappages de routines de texte générique
Routine TCHAR.H |
_UNICODE & _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Pour plus d'informations, consultez Champs de spécification de format — les fonctions scanf et wscanf.
Configuration requise
Routine |
En-tête requis |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> ou <wchar.h> |
La console n'est pas prise en charge dans les applications Windows Store . Les handles de flux standard associés à la console, stdin, stdout et stderr doivent être redirigés pour que les fonctions runtime C puissent les utiliser dans les applications Windows Store . Pour plus d'informations sur la compatibilité, consultez Compatibilité.
Exemple
// crt_scanf.c
// compile with: /W3
/* This program uses the scanf and wscanf functions
* to read formatted input.
*/
#include <stdio.h>
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
Équivalent .NET Framework
Voir également des méthodes Parse, telles que System::Double::Parse.
Voir aussi
Référence
Prise en charge de la virgule flottante
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l