vscanf
, vwscanf
Lee datos con formato del flujo de entrada estándar. Hay disponibles versiones más seguras de estas funciones; consulte vscanf_s
, vwscanf_s
.
Sintaxis
int vscanf(
const char *format,
va_list arglist
);
int vwscanf(
const wchar_t *format,
va_list arglist
);
Parámetros
format
Cadena de control de formato.
arglist
Lista de argumentos de variable.
Valor devuelto
Devuelve el número de campos que se convierten y asignan 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 vscanf
lee datos del flujo de entrada estándar stdin
y los escribe en las ubicaciones que proporciona la lista de argumentos arglist
. Cada argumento de la lista 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
Cuando se usa vscanf
para leer una cadena, especifique siempre un ancho para el formato %s (por ejemplo, "%32s" en lugar de "%s"); de lo contrario, la entrada con formato incorrecto puede provocar una saturación del búfer. Como alternativa, puede usar vscanf_s
, vwscanf_s
o fgets
.
vwscanf
es una versión con caracteres anchos de vscanf
; el argumento format
para vwscanf
es una cadena de caracteres anchos. vwscanf
y vscanf
se comportan exactamente igual si el flujo se abre en modo ANSI. vscanf
no admite la entrada desde un flujo UNICODE.
Asignaciones de rutinas de texto genérico
Rutina TCHAR.H | _UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_vtscanf |
vscanf |
vscanf |
vwscanf |
Para obtener más información, vea Formato de campos de especificación: scanf
y wscanf
funciones.
Requisitos
Routine | Encabezado necesario |
---|---|
vscanf |
<stdio.h> |
vwscanf |
<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_vscanf.c
// compile with: /W3
// This program uses the vscanf and vwscanf functions
// to read formatted input.
#include <stdio.h>
#include <stdarg.h>
int call_vscanf(char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vscanf(format, arglist);
va_end(arglist);
return result;
}
int call_vwscanf(wchar_t *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vwscanf(format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = call_vscanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws );
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 = call_vwscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws );
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 charactersThe 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
vscanf_s
, vwscanf_s