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

Consulte también

Compatibilidad con matemáticas y 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