scanf
, , _scanf_l
wscanf
, ,_wscanf_l
Lit les données mises en forme du flux d'entrée standard. Des versions plus sécurisées de ces fonctions sont disponibles ; voir , , wscanf_s
_scanf_s_l
, _wscanf_s_l
.scanf_s
Remarque
Dans Visual Studio 2015, les printf
fonctions et scanf
la famille de fonctions ont été déclarées comme inline
et déplacées vers les en-têtes et <conio.h>
les <stdio.h>
en-têtes. Si vous migrez du code plus ancien, vous pouvez voir l’erreur de l’éditeur de liens LNK2019 en connexion avec ces fonctions. Pour plus d’informations, consultez l’historique des modifications Visual C++ 2003 - 2015.
Syntaxe
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
Format de la chaîne de contrôle.
argument
Arguments facultatifs.
locale
Paramètres régionaux à utiliser.
Valeur retournée
Retourne le nombre de champs correctement convertis et affectés ; la valeur de retour n’inclut pas les champs qui ont été lus mais qui n’ont pas été affectés. La valeur de retour 0 indique qu'aucun champ n'a été assigné.
S’il format
s’agit d’un NULL
pointeur, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. 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 et d’autres codes d’erreur, consultez errno
, _doserrno
, _sys_errlist
et _sys_nerr
.
Notes
La fonction scanf
lit les données 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 d'un type qui 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.
Important
Quand il s’agit de lire une chaîne avec scanf
, spécifiez toujours la largeur du format %s
(par exemple, %32s
au lieu de %s
) ; une entrée mal formatée peut en effet facilement entraîner un dépassement de mémoire tampon. Vous pouvez également envisager d’utiliser scanf_s
, _scanf_s_l
, wscanf_s
ou _wscanf_s_l
fgets
.
wscanf
est une version à caractères larges de scanf
; l'argument format
de 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 pas en charge actuellement les entrées à partir d'un flux 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 et _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 : scanf
et wscanf
fonctions.
Spécifications
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 de la plateforme Windows universelle (UWP). Les handles de flux standard associés à la console (stdin
, stdout
et stderr
) doivent être redirigés pour que les fonctions de runtime C puissent les utiliser dans les applications UWP. Pour plus d’informations sur la compatibilité, consultez Compatibility.
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);
}
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 aussi
Prise en charge des fonctions mathématiques et à virgule flottante
E/S de flux
Paramètres régionaux
fscanf
, , _fscanf_l
fwscanf
, ,_fwscanf_l
printf
, , _printf_l
wprintf
, ,_wprintf_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
__swprintf_l
sscanf
, , _sscanf_l
swscanf
, ,_swscanf_l