Namespaces
Variants

std:: vwscanf, std:: vfwscanf, std:: vswscanf

From es.cppreference.net
< cpp ‎ | io ‎ | c
Definido en el encabezado <cwchar>
int vwscanf ( const wchar_t * format, std :: va_list vlist ) ;
(1) (desde C++11)
int vfwscanf ( std:: FILE * stream, const wchar_t * format, std :: va_list vlist ) ;
(2) (desde C++11)
int vswscanf ( const wchar_t * buffer, const wchar_t * format, std :: va_list vlist ) ;
(3) (desde C++11)

Lee datos de una variedad de fuentes, los interpreta según el format y almacena los resultados en ubicaciones definidas por vlist .

1) Lee los datos desde stdin .
2) Lee los datos del flujo de archivo stream .
3) Lee los datos del búfer de cadena ancha terminada en nulo buffer .

Contenidos

Parámetros

stream - flujo de archivo de entrada desde el que leer
buffer - puntero a una cadena ancha terminada en nulo desde la que leer
format - puntero a una cadena ancha terminada en nulo que especifica cómo leer la entrada
vlist - lista de argumentos variable que contiene los argumentos receptores.


La cadena format consiste en

  • caracteres anchos que no son espacios en blanco, excepto %: cada carácter de este tipo en la cadena de formato consume exactamente un carácter idéntico del flujo de entrada, o causa que la función falle si el siguiente carácter en el flujo no es igual al compararlo.
  • caracteres de espacio en blanco: cualquier carácter de espacio en blanco individual en la cadena de formato consume todos los caracteres de espacio en blanco consecutivos disponibles de la entrada (determinado como si se llamara a std::iswspace en un bucle). Nótese que no hay diferencia entre "\n", " ", "\t\t" u otros espacios en blanco en la cadena de formato.
  • especificaciones de conversión. Cada especificación de conversión tiene el siguiente formato:
  • carácter introductorio %.
  • (opcional) carácter de supresión de asignación *. Si esta opción está presente, la función no asigna el resultado de la conversión a ningún argumento receptor.
  • (opcional) número entero (mayor que cero) que especifica la anchura máxima de campo, es decir, el número máximo de caracteres que la función puede consumir al realizar la conversión especificada por la especificación de conversión actual. Nótese que %s y %[ pueden provocar un desbordamiento del búfer si no se proporciona la anchura.
  • (opcional) modificador de longitud que especifica el tamaño del argumento receptor, es decir, el tipo de destino real. Esto afecta la precisión de la conversión y las reglas de desbordamiento. El tipo de destino predeterminado es diferente para cada tipo de conversión (ver tabla abajo).
  • especificador de formato de conversión.

Los siguientes especificadores de formato están disponibles:

Especificador
de conversión
Explicación Tipo de
argumento esperado
Modificador de longitud → hh h ninguno l ll j z t L
Solo disponible desde C++11 → Sí Sí Sí Sí Sí
%
Coincide con el literal %.
N/A N/A N/A N/A N/A N/A N/A N/A N/A
c

Coincide con un carácter o una secuencia de caracteres.

  • Si se usa un especificador de anchura, coincide exactamente con anchura caracteres anchos (el argumento debe ser un puntero a un arreglo con suficiente espacio).
  • A diferencia de %s y %[, no añade el carácter nulo al arreglo.
N/A N/A
char*
wchar_t*
N/A N/A N/A N/A N/A
s

Coincide con una secuencia de caracteres que no son espacios en blanco (una cadena).

  • Si se usa un especificador de anchura, coincide hasta anchura o hasta el primer carácter de espacio en blanco, lo que ocurra primero.
  • Siempre almacena un carácter nulo además de los caracteres coincidentes (por lo tanto, el arreglo del argumento debe tener espacio para al menos anchura+1 caracteres).
[conjunto ]

Coincide con una secuencia no vacía de caracteres del conjunto de caracteres.

  • Si el primer carácter del conjunto es ^, entonces se coinciden todos los caracteres que no están en el conjunto.
  • Si el conjunto comienza con ] o ^] entonces el carácter ] también se incluye en el conjunto.
  • Está definido por la implementación si el carácter - en una posición no inicial en el conjunto de escaneo puede indicar un rango, como en [0-9].
  • Si se usa un especificador de anchura, solo coincide hasta anchura.
  • Siempre almacena un carácter nulo además de los caracteres coincidentes (por lo tanto, el arreglo del argumento debe tener espacio para al menos anchura+1 caracteres).
d

Coincide con un entero decimal.

  • El formato del número es el mismo que espera std::wcstol con el valor 10 para el argumento base.
signed char* o unsigned char*
signed short* o unsigned short*
signed int* o unsigned int*
signed long* o unsigned long*
signed long long* o unsigned long long*
std::intmax_t* o std::uintmax_t*
std::size_t*
std::ptrdiff_t*
N/A
b (C++26)

Coincide con un entero binario sin signo.

  • El formato del número es el mismo que espera std::wcstoul con el valor 2 para el argumento base.
i

Coincide con un entero.

  • El formato del número es el mismo que espera std::wcstol con el valor 0 para el argumento base (la base se determina por los primeros caracteres analizados).
u

Coincide con un entero decimal sin signo.

  • El formato del número es el mismo que espera std::wcstoul con el valor 10 para el argumento base.
o

Coincide con un entero octal sin signo.

  • El formato del número es el mismo que espera std::wcstoul con el valor 8 para el argumento base.
x
X

Coincide con un entero hexadecimal sin signo.

  • El formato del número es el mismo que espera std::wcstoul con el valor 16 para el argumento base.
n

Devuelve el número de caracteres leídos hasta ahora.

  • No se consume ninguna entrada. No incrementa el contador de asignaciones.
  • Si el especificador tiene un operador de supresión de asignación definido, el comportamiento no está definido.
a (C++11)
A (C++11)
e
E
f
F (C++11)
g
G

Coincide con un número de punto flotante.

  • El formato del número es el mismo que espera std::wcstof.
N/A N/A
float*
double*
N/A N/A N/A N/A
long double*
p

Coincide con una secuencia de caracteres definida por la implementación que define un puntero.

  • printfLas funciones de la familia %p deberían producir la misma secuencia usando el especificador de formato
. N/A
void**
N/A N/A N/A N/A N/A N/A
Notas

Para cada especificador de conversión que no sea n, la secuencia más larga de caracteres de entrada que no excede ninguna anchura de campo especificada y que es exactamente lo que el especificador de conversión espera o es un prefijo de una secuencia que esperaría, es lo que se consume del flujo. El primer carácter, si lo hay, después de esta secuencia consumida permanece sin leer. Si la secuencia consumida tiene longitud cero o si la secuencia consumida no puede convertirse como se especificó anteriormente, se produce un fallo de coincidencia a menos que el final del archivo, un error de codificación o un error de lectura impidieran la entrada del flujo, en cuyo caso es un fallo de entrada.

Excepto para el especificador %, el elemento de entrada (o, para %n, el recuento de caracteres de entrada) se convierte primero a un tipo apropiado para el especificador de conversión. A menos que la asignación se haya suprimido con *, el resultado de la conversión se escribe en el objeto al que apunta el siguiente argumento que aún no se ha escrito. Si este objeto no tiene un tipo apropiado, o si el resultado de la conversión no se puede representar en el objeto, el comportamiento no está definido.

Todos los especificadores de conversión que no sean [, c y n consumen y descartan todos los caracteres de espacio en blanco iniciales (determinado como si se llamara a std::iswspace) antes de intentar analizar la entrada. Estos caracteres consumidos no cuentan para la anchura máxima de campo especificada.

Si no se usa el especificador de longitud l, los especificadores de conversión c, s y [ realizan la conversión de caracteres anchos a multibyte como si se llamara a std::wcrtomb con un objeto std::mbstate_t inicializado a cero antes de que se convierta el primer carácter.

Los especificadores de conversión s y [ siempre almacenan el terminador nulo además de los caracteres coincidentes. El tamaño del arreglo de destino debe ser al menos uno mayor que la anchura de campo especificada. El uso de %s o %[, sin especificar el tamaño del arreglo de destino, es tan inseguro como std::gets.

Las especificaciones de conversión correctas para los tipos de enteros de anchura fija (std::int8_t, etc.) se definen en el encabezado <cinttypes> (aunque SCNdMAX, SCNuMAX, etc. son sinónimos de %jd, %ju, etc.).

Hay un punto de secuencia después de la acción de cada especificador de conversión; esto permite almacenar múltiples campos en la misma variable "sumidero".

Al analizar un valor de punto flotante incompleto que termina en el exponente sin dígitos, como analizar "100er" con el especificador de conversión %f, la secuencia "100e" (el prefijo más largo de un número de punto flotante posiblemente válido) se consume, lo que resulta en un error de coincidencia (la secuencia consumida no se puede convertir a un número de punto flotante), quedando "r". Algunas implementaciones existentes no siguen esta regla y retroceden para consumir solo "100", dejando "er", por ejemplo, error glibc 1765.

Si una especificación de conversión no es válida, el comportamiento no está definido.

Valor de retorno

Número de argumentos leídos exitosamente, o EOF si ocurre un fallo.

Ejemplo

Véase también

lee entrada formateada de caracteres anchos desde stdin , un flujo de archivo o un búfer
(función)
Documentación de C para vwscanf , vfwscanf , vswscanf