Compartir a través de


scanf, _scanf_l, , wscanf, _wscanf_l

Lee datos con formato del flujo de entrada estándar. Hay disponibles versiones más seguras de estas funciones; consulte scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.

Nota:

En Visual Studio 2015, la familia de funciones printf y scanf se declararon como inline y se movieron a los encabezados <stdio.h> y <conio.h>. Si va a migrar código anterior, es posible que vea error del enlazador LNK2019 en conexión con estas funciones. Para obtener más información, consulte Historial de cambios en Visual C++ 2003 - 2015.

Sintaxis

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]...
);

Parámetros

format
Cadena de control de formato.

argument
Argumentos opcionales.

locale
Configuración regional que se va a usar.

Valor devuelto

Devuelve el número de campos convertidos y asignados correctamente; El valor devuelto no incluye campos leídos pero no asignados. Un valor devuelto de 0 indica que no se ha asignado ningún campo.

Si format es un NULL puntero, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven EOF y establecen errno en EINVAL.

Para información sobre estos y otros códigos de error, consulte errno, _doserrno_sys_errlist y _sys_nerr.

Comentarios

La función scanf lee datos del flujo de entrada estándar stdin y escribe los datos en la ubicación que se proporciona en argument. Cada argument debe ser un puntero a una variable de un tipo que se corresponda con un especificador de tipo en format. Si la copia tiene lugar entre cadenas que se superponen, el comportamiento es indefinido.

Importante

Al leer una cadena con scanf, especifique siempre un ancho para el formato %s (por ejemplo, %32s en lugar de %s); si no se hace así, el formato incorrecto de la entrada puede provocar una saturación del búfer. También puede considerar la posibilidad de usar scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l o fgets.

wscanf es una versión con caracteres anchos de scanf; el argumento format para wscanf es una cadena de caracteres anchos. wscanf y scanf se comportan exactamente igual si el flujo se abre en modo ANSI. scanf no admite actualmente la entrada desde un flujo UNICODE.

Las versiones de estas funciones con el sufijo _l son idénticas salvo que usan el parámetro locale pasado en lugar de la configuración regional del subproceso actual.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tscanf scanf scanf wscanf
_tscanf_l _scanf_l _scanf_l _wscanf_l

Para obtener más información, vea Formato de campos de especificación: scanf y wscanf funciones.

Requisitos

Routine Encabezado necesario
scanf, _scanf_l <stdio.h>
wscanf, _wscanf_l <stdio.h> o <wchar.h>

La consola no se admite en las aplicaciones de la Plataforma universal de Windows (UWP). Los identificadores de flujo estándar asociados a la consola, stdin, stdout y stderr, se deben redirigir antes de que las funciones en tiempo de ejecución de C puedan usarlos en aplicaciones para UWP. Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// 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

Vea también

Compatibilidad con cálculos matemáticos y el punto flotante
E/S de secuencia
Configuración regional
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