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 d’erreur et d’autres codes d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

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_sou_wscanf_s_lfgets.

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 routine de texte générique

TCHAR.H Routine _UNICODE et _MBCS non défini _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 plateforme Windows universelle (UWP). Les handles de flux standard associés à la console, stdinet stdoutstderrdoivent être redirigés avant que les fonctions d’exécution 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 mathématique 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