wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
| Определено в заголовке <wchar.h>
|
||
int wscanf( const wchar_t* format, ... );
|
(1) | (начиная с C95) (до C99) |
int wscanf( const wchar_t* restrict format, ... );
|
(начиная с C99) | |
int fwscanf( FILE* stream, const wchar_t* format, ... );
|
(2) | (начиная с C95) (до C99) |
int fwscanf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(начиная с C99) | |
int swscanf( const wchar_t* buffer, const wchar_t* format, ... );
|
(3) | (начиная с C95) (до C99) |
int swscanf( const wchar_t* restrict buffer,
const wchar_t* restrict format, ... );
|
(начиная с C99) | |
int wscanf_s( const wchar_t* restrict format, ...);
|
(4) | (начиная с C11) |
int fwscanf_s( FILE* restrict stream,
const wchar_t* restrict format, ...);
|
(5) | (начиная с C11) |
int swscanf_s( const wchar_t* restrict s,
const wchar_t* restrict format, ...);
|
(6) | (начиная с C11) |
Читает данные из различных источников, интерпретирует их в соответствии с format и сохраняет результаты в указанные места.
stream.buffer. Достижение конца строки эквивалентно достижению состояния конца файла для fwscanf%c, %s и %[ спецификаторы преобразования ожидают два аргумента (обычный указатель и значение типа rsize_t, указывающее размер принимающего массива, который может быть 1 при чтении с %lc в один широкий символ), и за исключением того, что следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную функцию обработки ограничений:
- любой из аргументов типа указатель является нулевым указателем
format,streamилиbufferявляется нулевым указателем- количество символов, которое было бы записано с помощью
%c,%sили%[, плюс завершающий нулевой символ, превысит второй (rsize_t) аргумент, предоставленный для каждого из этих спецификаторов преобразования - опционально, любая другая обнаруживаемая ошибка, например, неизвестный спецификатор преобразования
wscanf_s, fwscanf_s и swscanf_s гарантированно доступны только если __STDC_LIB_EXT1__ определено реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 до включения <wchar.h>.Параметры
| stream | - | входной файловый поток для чтения |
| buffer | - | указатель на нуль-терминированную широкую строку для чтения |
| format | - | указатель на нуль-терминированную широкую строку, задающую способ чтения входных данных |
| ... | - | принимающие аргументы. |
Строка format состоит из
- непробельных широких символов, кроме
%: каждый такой символ в строке формата потребляет ровно один идентичный символ из входного потока или приводит к сбою функции, если следующий символ в потоке не равен ему. - пробельных символов: любой отдельный пробельный символ в строке формата потребляет все доступные последовательные пробельные символы из входных данных (определяется как если бы вызовом iswspace в цикле). Обратите внимание, что нет различия между
"\n"," ","\t\t"или другими пробельными символами в строке формата. - спецификаций преобразования. Каждая спецификация преобразования имеет следующий формат:
- вводный символ
%.
- вводный символ
- (необязательно) символ подавления присваивания
*. Если эта опция присутствует, функция не присваивает результат преобразования ни одному принимающему аргументу.
- (необязательно) символ подавления присваивания
- (необязательно) целое число (больше нуля), которое задает максимальную ширину поля, то есть максимальное количество символов, которое функция может потребить при выполнении преобразования, указанного текущей спецификацией преобразования. Обратите внимание, что
%sи%[могут привести к переполнению буфера, если ширина не указана.
- (необязательно) целое число (больше нуля), которое задает максимальную ширину поля, то есть максимальное количество символов, которое функция может потребить при выполнении преобразования, указанного текущей спецификацией преобразования. Обратите внимание, что
- (необязательно) модификатор длины, который задает размер принимающего аргумента, то есть фактический целевой тип. Это влияет на точность преобразования и правила переполнения. Целевой тип по умолчанию различается для каждого типа преобразования (см. таблицу ниже).
- спецификатор формата преобразования.
Доступны следующие спецификаторы формата:
| Спецификатор преобразования |
Пояснение | Ожидаемый тип аргумента | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Модификатор длины→ | hh
|
h
|
нет | l
|
ll
|
j
|
z
|
t
|
L
| |
| Доступно только начиная с C99→ | Да | Да | Да | Да | Да | |||||
%
|
Соответствует литералу
%. |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
c
|
Соответствует символу или последовательности символов.
|
Н/Д | Н/Д | char* |
wchar_t* |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
s
|
Соответствует последовательности непробельных символов (строка).
| |||||||||
[set ]
|
Соответствует непустой последовательности символов из множества символов.
| |||||||||
d
|
Соответствует десятичному целому числу.
|
signed char* или unsigned char* |
signed short* или unsigned short* |
signed int* или unsigned int* |
signed long* или unsigned long* |
signed long long* или unsigned long long* |
intmax_t* или uintmax_t* |
size_t* |
ptrdiff_t* |
Н/Д |
b (C23)
|
Соответствует беззнаковому двоичному целому числу.
| |||||||||
i
|
Соответствует целому числу.
| |||||||||
u
|
Соответствует беззнаковому десятичному целому числу.
| |||||||||
o
|
Соответствует беззнаковому восьмеричному целому числу.
| |||||||||
xX
|
Соответствует беззнаковому шестнадцатеричному целому числу.
| |||||||||
n
|
Возвращает количество символов, прочитанных до сих пор.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
Соответствует числу с плавающей запятой.
|
Н/Д | Н/Д | float* |
double* |
Н/Д | Н/Д | Н/Д | Н/Д | long double* |
p
|
Соответствует определяемой реализацией последовательности символов, задающей указатель.
|
. | Н/Д | void** |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
| Примечания | ||||||||||
|
Для каждого спецификатора преобразования, кроме За исключением спецификатора Все спецификаторы преобразования, кроме Если спецификатор длины Спецификаторы преобразования Правильные спецификации преобразования для целочисленных типов фиксированной ширины (int8_t, и т.д.) определены в заголовке <inttypes.h> (хотя SCNdMAX, SCNuMAX, и т.д. являются синонимами Существует точка последовательности после действия каждого спецификатора преобразования; это позволяет сохранять несколько полей в одну и ту же переменную-«приемник». При разборе неполного значения с плавающей запятой, которое заканчивается на показатель степени без цифр, например, при разборе Если спецификация преобразования недействительна, поведение не определено. | ||||||||||
Возвращаемое значение
Пример
#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);
}
}
Возможный вывод:
State: California
Age : 170 years
Pi : 3.14159
State : Mississippi
Capital: Jackson
Jackson population (in 2020): 420000
Highest elevation: 807ft
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.29.2.2 Функция fwscanf (стр.: TBD)
- 7.29.2.4 Функция swscanf (стр.: TBD)
- 7.29.2.12 Функция wscanf (стр.: TBD)
- K.3.9.1.2 Функция fwscanf_s (стр.: TBD)
- K.3.9.1.5 Функция swscanf_s (стр.: TBD)
- K.3.9.1.14 Функция wscanf_s (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.29.2.2 Функция fwscanf (стр.: TBD)
- 7.29.2.4 Функция swscanf (стр.: TBD)
- 7.29.2.12 Функция wscanf (стр.: TBD)
- K.3.9.1.2 Функция fwscanf_s (стр.: TBD)
- K.3.9.1.5 Функция swscanf_s (стр.: TBD)
- K.3.9.1.14 Функция wscanf_s (стр.: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.29.2.2 Функция fwscanf (стр.: 410-416)
- 7.29.2.4 Функция swscanf (стр.: 417)
- 7.29.2.12 Функция wscanf (стр.: 421)
- K.3.9.1.2 Функция fwscanf_s (стр.: 628-629)
- K.3.9.1.5 Функция swscanf_s (стр.: 631)
- K.3.9.1.14 Функция wscanf_s (стр.: 638)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.24.2.2 Функция fwscanf (стр.: 356-362)
- 7.24.2.4 Функция swscanf (стр.: 362)
- 7.24.2.12 Функция wscanf (стр.: 366-367)
Смотри также
(C99)(C99)(C99)(C11)(C11)(C11) |
читает форматированный широкий ввод из stdin, файлового потока или буфера, используя список аргументов переменной длины (функция) |
Документация C++ для wscanf, fwscanf, swscanf
| |