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; vea scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.
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 que se han convertido y asignado correctamente; el valor devuelto no incluye los campos que se leyeron pero no se asignaron. Un valor devuelto de 0 indica que no se ha asignado ningún campo.
Si format es un puntero NULL, 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 obtener información sobre estos y otros códigos de error, vea _doserrno, errno, _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.
Nota sobre la seguridad |
---|
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 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 rutina 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 Campos de especificación de formato: funciones scanf y wscanf.
Requisitos
Rutina |
Encabezado necesario |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> o <wchar.h> |
La consola no se admite en las aplicaciones de Tienda Windows. Se deben redirigir los identificadores estándar de flujo que están asociados a la consola, stdin, stdout y stderr, antes de que las funciones en tiempo de ejecución de C puedan usarlos en aplicaciones de Tienda Windows. Para obtener más información sobre compatibilidad, vea 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);
}
Equivalente en .NET Framework
Vea también los métodos Parse, como System::Double::Parse.
Vea también
Referencia
Compatibilidad con el punto flotante
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l