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
_doserrno
et _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_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 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, stdin
et stdout
stderr
doivent ê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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : pendant toute l’année 2024, nous allons éliminer progressivement Problèmes GitHub comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, voir :Soumettre et afficher des commentaires pour