scanf, _scanf_l, wscanf, _wscanf_lscanf, _scanf_l, wscanf, _wscanf_l

Lit les données mises en forme du flux d'entrée standard.Reads formatted data from the standard input stream. Il existe des versions plus sécurisées de ces fonctions. Consultez scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.More secure versions of these function are available; see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.

SyntaxeSyntax

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ètresParameters

formatformat
Format de la chaîne de contrôle.Format control string.

argumentargument
Arguments facultatifs.Optional arguments.

localelocale
Paramètres régionaux à utiliser.The locale to use.

Valeur de retourReturn Value

Retourne le nombre de champs correctement convertis et assignés. La valeur de retour n'inclut pas les champs qui ont été lus mais pas assignés.Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. La valeur de retour 0 indique qu'aucun champ n'a été assigné.A return value of 0 indicates that no fields were assigned.

Si format est un pointeur null , le gestionnaire de paramètres non valides est appelé, comme décrit dans validation de paramètre.If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, ces fonctions retournent EOF et attribuent à errno la valeur EINVAL.If execution is allowed to continue, these functions return EOF and set errno to EINVAL.

Pour plus d’informations sur ces codes d’erreur et les autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

NotesRemarks

La fonction scanf lit les données à partir du flux d’entrée standard stdin et écrit les données dans l’emplacement donné par argument.The scanf function reads data from the standard input stream stdin and writes the data into the location given by argument. Chaque argument doit être un pointeur vers une variable d’un type qui correspond à un spécificateur de type au format.Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. Si la copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.If copying takes place between strings that overlap, the behavior is undefined.

Important

Lors de la lecture d’une chaîne avec scanf, spécifiez toujours une largeur pour le format % s (par exemple, « % 32s » au lieu de « % s » ); dans le cas contraire, une entrée mal mise en forme peut facilement provoquer un dépassement de mémoire tampon.When reading a string with scanf, always specify a width for the %s format (for example, "%32s" instead of "%s"); otherwise, improperly formatted input can easily cause a buffer overrun. Vous pouvez aussi envisager d’utiliser scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ou fgets.Alternately, consider using scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l or fgets.

wscanf est une version à caractères larges de scanf; l’argument format de wscanf est une chaîne de caractères larges.wscanf is a wide-character version of scanf; the format argument to wscanf is a wide-character string. wscanf et scanf se comportent de la même manière si le flux est ouvert en mode ANSI.wscanf and scanf behave identically if the stream is opened in ANSI mode. scanf ne prend pas actuellement en charge l’entrée d’un flux Unicode.scanf doesn't currently support input from a UNICODE stream.

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.The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE et _MBCS non définis_UNICODE & _MBCS not defined _MBCS défini_MBCS defined _UNICODE défini_UNICODE defined
_tscanf_tscanf scanfscanf scanfscanf wscanfwscanf
_tscanf_l_tscanf_l _scanf_l_scanf_l _scanf_l_scanf_l _wscanf_l_wscanf_l

Pour plus d’informations, consultez Champs de spécification de format : fonctions scanf et wscanf.For more information, see Format Specification Fields — scanf functions and wscanf Functions.

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header
scanf, _scanf_lscanf, _scanf_l <stdio.h><stdio.h>
wscanf, _wscanf_lwscanf, _wscanf_l <stdio.h> ou <wchar.h><stdio.h> or <wchar.h>

La console n’est pas prise en charge dans les applications de plateforme Windows universelle (UWP).The console is not supported in Universal Windows Platform (UWP) apps. Les handles de flux standard associés à la console, stdin, stdoutet stderr, doivent être redirigés pour que les fonctions runtime C puissent les utiliser dans les applications UWP.The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. Pour plus d'informations sur la compatibilité, voir Compatibilité.For additional compatibility information, see Compatibility.

ExemplesExample

// 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);
}
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Voir aussiSee also

Prise en charge de la virgule flottanteFloating-Point Support
E/S de fluxStream I/O
Paramètres régionauxLocale
fscanf, _fscanf_l, fwscanf, _fwscanf_lfscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sscanf, _sscanf_l, swscanf, _swscanf_lsscanf, _sscanf_l, swscanf, _swscanf_l