wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
| Definido en el encabezado <wchar.h>
|
||
int wscanf( const wchar_t* format, ... );
|
(1) | (desde C95) (hasta C99) |
int wscanf( const wchar_t* restrict format, ... );
|
(desde C99) | |
int fwscanf( FILE* stream, const wchar_t* format, ... );
|
(2) | (desde C95) (hasta C99) |
int fwscanf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(desde C99) | |
int swscanf( const wchar_t* buffer, const wchar_t* format, ... );
|
(3) | (desde C95) (hasta C99) |
int swscanf( const wchar_t* restrict buffer,
const wchar_t* restrict format, ... );
|
(desde C99) | |
int wscanf_s( const wchar_t* restrict format, ...);
|
(4) | (desde C11) |
int fwscanf_s( FILE* restrict stream,
const wchar_t* restrict format, ...);
|
(5) | (desde C11) |
int swscanf_s( const wchar_t* restrict s,
const wchar_t* restrict format, ...);
|
(6) | (desde C11) |
Lee datos de una variedad de fuentes, los interpreta de acuerdo con format y almacena los resultados en ubicaciones dadas.
stream.buffer. Alcanzar el final de la cadena es equivalente a alcanzar la condición de fin de archivo para fwscanf%c, %s y %[ esperan cada uno dos argumentos (el puntero habitual y un valor de tipo rsize_t que indica el tamaño del arreglo receptor, que puede ser 1 cuando se lee con %lc en un carácter ancho único) y excepto que los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricción actualmente instalada:
- cualquiera de los argumentos de tipo puntero es un puntero nulo
format,streamobufferes un puntero nulo- el número de caracteres que se escribirían por
%c,%so%[, más el carácter nulo de terminación, excedería el segundo argumento (rsize_t) proporcionado para cada uno de esos especificadores de conversión - opcionalmente, cualquier otro error detectable, como un especificador de conversión desconocido
wscanf_s, fwscanf_s y swscanf_s solo se garantiza que estén disponibles si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <wchar.h>.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 |
| ... | - | argumentos receptores. |
La cadena format consiste en
- caracteres anchos que no son espacio en blanco excepto
%: cada uno de esos caracteres 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. - 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 iswspace en un bucle). Note 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 introductorio
- carácter de supresión de asignación (opcional). Si esta opción está presente, la función no asigna el resultado de la conversión a ningún argumento receptor.
*(opcional)
- carácter de supresión de asignación (opcional). Si esta opción está presente, la función no asigna el resultado de la conversión a ningún argumento receptor.
- número entero (mayor que cero) que especifica el ancho de campo máximo, 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. Note que y
%spueden causar desbordamiento del búfer si no se proporciona el ancho.%[(opcional)
- número entero (mayor que cero) que especifica el ancho de campo máximo, 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. Note que y
- 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 a continuación).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→ | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ninguno | hh
|
h
|
Solo disponible desde C99→ | l
|
ll
|
j
|
z
|
t
|
L
| |
| Sí | Sí | Sí | Sí | Sí | Coincide con literal | |||||
%
|
.
%N/A |
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.
|
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).
| |||||||||
[conjunto ]
|
Coincide con una secuencia no vacía de caracteres del conjunto de caracteres.
| |||||||||
d
|
Coincide con un entero decimal.
|
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* |
intmax_t* o uintmax_t* |
size_t* |
ptrdiff_t* |
N/A |
b (C23)
|
Coincide con un entero binario sin signo.
| |||||||||
i
|
Coincide con un entero.
| |||||||||
u
|
Coincide con un entero decimal sin signo.
| |||||||||
o
|
Coincide con un entero octal sin signo.
| |||||||||
xX
|
Coincide con un entero hexadecimal sin signo.
| |||||||||
n
|
Devuelve el número de caracteres leídos hasta ahora.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
Coincide con un número de punto flotante.
|
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.
|
. | 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 Excepto para el especificador Todos los especificadores de conversión que no sean Si el especificador de longitud Los especificadores de conversión Los especificadores de conversión correctos para los tipos enteros de ancho fijo (int8_t, etc.) se definen en el encabezado <inttypes.h> (aunque SCNdMAX, SCNuMAX, etc. son sinónimos de 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 Si una especificación de conversión no es válida, el comportamiento no está definido. | ||||||||||
Valor de retorno
Ejemplo
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#define NUM_VARS 3
#define ERR_READ 2
#define ERR_WRITE 3
int main(void)
{
wchar_t state[64];
wchar_t capital[64];
unsigned int population = 0;
int elevation = 0;
int age = 0;
float pi = 0;
#if INTERACTIVE_MODE
wprintf(L"Enter state, age, and pi value: ");
if (wscanf(L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#else
wchar_t* input = L"California 170 3.141592";
if (swscanf(input, L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#endif
wprintf(L"State: %ls\nAge : %d years\nPi : %.5f\n\n", state, age, pi);
FILE* fp = tmpfile();
if (fp)
{
// write some data to temp file
if (!fwprintf(fp, L"Mississippi Jackson 420000 807"))
{
fprintf(stderr, "Error writing to file.\n");
fclose(fp);
return ERR_WRITE;
}
// rewind file pointer
rewind(fp);
// read data into variables
fwscanf(fp, L"%ls%ls%u%d", state, capital, &population, &elevation);
wprintf(L"State : %ls\nCapital: %ls\nJackson population (in 2020): %u\n"
L"Highest elevation: %dft\n",
state, capital, population, elevation);
fclose(fp);
}
}
Posible salida:
State: California
Age : 170 years
Pi : 3.14159
State : Mississippi
Capital: Jackson
Jackson population (in 2020): 420000
Highest elevation: 807ft
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
- 7.29.2.2 La función fwscanf (p: TBD)
- 7.29.2.4 La función swscanf (p: TBD)
- 7.29.2.12 La función wscanf (p: TBD)
- K.3.9.1.2 La función fwscanf_s (p: TBD)
- K.3.9.1.5 La función swscanf_s (p: TBD)
- K.3.9.1.14 La función wscanf_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.29.2.2 La función fwscanf (p: TBD)
- 7.29.2.4 La función swscanf (p: TBD)
- 7.29.2.12 La función wscanf (p: TBD)
- K.3.9.1.2 La función fwscanf_s (p: TBD)
- K.3.9.1.5 La función swscanf_s (p: TBD)
- K.3.9.1.14 La función wscanf_s (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
- 7.29.2.2 La función fwscanf (p: 410-416)
- 7.29.2.4 La función swscanf (p: 417)
- 7.29.2.12 La función wscanf (p: 421)
- K.3.9.1.2 La función fwscanf_s (p: 628-629)
- K.3.9.1.5 La función swscanf_s (p: 631)
- K.3.9.1.14 La función wscanf_s (p: 638)
- Estándar C99 (ISO/IEC 9899:1999):
- 7.24.2.2 La función fwscanf (p: 356-362)
- 7.24.2.4 La función swscanf (p: 362)
- 7.24.2.12 La función wscanf (p: 366-367)
Véase también
(C99)(C99)(C99)(C11)(C11)(C11) |
lee entrada de caracteres anchos formateada desde stdin, un flujo de archivo o un búfer usando una lista de argumentos variable (función) |
Documentación de C++ para wscanf, fwscanf, swscanf
| |