scanf, _scanf_l, wscanf, _wscanf_l
Datos con formato lectura de la secuencia de entrada estándar.Versiones más seguras de estos función están disponibles; 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
La configuración regional a utilizar.
Valor devuelto
Devuelve el número de campos convierten y asignados correctamente; el valor devuelto no incluye los campos que se leyeron pero no asignados.Devuelve un valor de 0 indica que no se asignó ningún campos.
Si format es un puntero de NULL, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, estas funciones EOF return y errno determinado a EINVAL.
Para obtener información sobre éstos y otros códigos de error, vea _doserrno, errno, _sys_errlist, y _sys_nerr.
Comentarios
La función de scanf lee datos de la secuencia de entrada estándar stdin y escribe los datos en la ubicación especificada por 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 superpuestas, el comportamiento es indefinido.
Nota sobre la seguridad |
---|
Al leer una cadena con scanf, especifique siempre un ancho para el formato de %s (por ejemplo, "%32s" en lugar de "%s"); si no, la entrada con formato incorrecto con facilidad puede producir una saturación del búfer.Como alternativa, considere utilizar scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l o fgets. |
wscanf es una versión con caracteres anchos de scanf; el argumento de format a wscanf es una cadena de caracteres.wscanf y scanf se comportan exactamente igual si la secuencia se abre en el modo de ANSI.scanf no admite actualmente la entrada de una secuencia de UNICODE.
Las versiones de estas funciones con el sufijo de _l son idénticas salvo que utilizan el parámetro locale pasado en lugar de la configuración regional del subproceso actual.
Asignaciones de la rutina de Genérico- texto
Rutina de 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 la especificación de formato — scanf funciona y el wscanf funciona.
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.Los identificadores estándar de la secuencia asociados a la consola, stdin, stdout, y stderr, deben redirigir antes de que las funciones en tiempo de ejecución de C pueden utilizarlos en las aplicaciones de Tienda Windows.Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.
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 de Parse, como System::Double::Parse.
Vea también
Referencia
Compatibilidad de punto flotante
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l