Поделиться через


Символы поля типа scanf

Следующие сведения применимы к любой функции из семейства scanf, включая безопасные версии, например scanf_s.

Символ type — единственное необходимое поле формата; он находится после всех необязательных полей формата. Символ type определяет, интерпретируется ли аргумент как символ, строка или число.

Символы типа для функций scanf

Знак

Ожидаемый тип входных данных

Тип аргумента

Аргумент размера в безопасной версии?

c

Символ. При использовании с функциями scanf определяет однобайтовый символ; при использовании с функциями wscanf определяет расширенный символ. Знаки пробела обычно пропускаются при чтении, если указан c. Для считывания следующего однобайтового символа, отличного от пробела, используйте %1s; для считывания следующего расширенного символ, отличного от пробела используйте %1ws.

Указатель на char при использовании с функциями scanf, указатель на wchar_t при использовании с функциями wscanf.

Обязательный. Размер не учитывает пространство для завершающего нулевого символа.

C

Символ противоположного размера. При использовании с функциями scanf определяет расширенный символ; при использовании с функциями wscanf определяет однобайтовый символ. Знаки пробела обычно пропускаются при чтении, если указан C. Для считывания следующего однобайтового символа, отличного от пробела, используйте %1s; для считывания следующего расширенного символ, отличного от пробела используйте %1ws.

Указатель на wchar_t при использовании с функциями scanf, указатель на char при использовании с функциями wscanf.

Обязательный. Аргумент размера не учитывает пространство для завершающего нулевого символа.

d

Десятичное целое число.

Указатель на int.

Нет.

i

Параметр типа Integer (целое число). Шестнадцатеричный, если входная строка начинается с «0x» или «0X», восьмеричный, если строка начинается с «0»; в противном случае десятичное число.

Указатель на int.

Нет.

o

Восьмеричное целое число.

Указатель на int.

Нет.

u

Десятичное целое число без знака.

Указатель на unsignedint.

Нет.

x

Шестнадцатеричное целое число.

Указатель на int.

Нет.

e, E, f, g, G

Число с плавающей запятой, состоящее из необязательного знака (+ или -), последовательности из одной или нескольких десятичных цифр, содержащей десятичную запятую, и необязательной экспоненты («e» или «E»), за которой следует целое число со знаком (необязательным).

Указатель на float.

Нет.

n

Не прочитаны данные из потока или буфера.

Указатель на int, по которому сохраняется число успешно прочитанных из потока или буфера знаков до этой точки в текущем вызове функции scanf или wscanf.

Нет.

s

Строка, до первого пробельного символа (пробела, знака табуляции или новой строки). Для чтения строк, не разделенных пробелами, используйте пару квадратных скобок ([ ]), как описано в разделе Спецификация ширины scanf.

При использовании с функциями scanf, обозначает однобайтовый массив знаков; при использовании с функциями wscanf — массив юникода. В любом случае массив символов должен быть достаточно большим для поля ввода и автоматически добавляемого завершающего нулевого символа.

Обязательный. Размер включает место для нулевого завершающего символа.

S

Символьная строка противоположного размера, до первого пробельного символа (пробела, знака табуляции или новой строки). Для чтения строк, не разделенных пробелами, используйте пару квадратных скобок ([ ]), как описано в разделе Спецификация ширины scanf.

При использовании с функциями scanf , обозначает массив расширенных символов; при использовании с функциями wscanf — однобайтовый массив. В любом случае массив символов должен быть достаточно большим для поля ввода и автоматически добавляемого завершающего нулевого символа.

Обязательный. Размер включает место для нулевого завершающего символа.

Описатели a и A (см. Символы поля типа printf) не доступны для scanf.

Аргументы размера, при необходимости, необходимо передавать в списке параметров сразу после аргумента, к которому они применяются. Например, приведенный ниже код

char string1[11], string2[9];
scanf("%10s %8s", string1, 11, string2, 9);

считывает строку с максимальной длиной 10 в string1 и строку с максимальной длиной 8 в string2. Размер буфера должен быть по крайней мере на один больше ширины спецификации, поскольку должно быть зарезервировано место для нулевого завершающего символа.

Строка формата может обрабатывать однобайтовые или расширенные входные символы независимо от того, используется ли однобайтовая или расширенная версия функции. Таким образом, для чтения однобайтового или расширенного символа с использованием функций scanf и wscanf используйте описатели формата следующим образом.

Считать символ как

Используйте эту функцию

С этими описателями формата

однобайтовый

Функции scanf

c, hc или hC

однобайтовый

Функции wscanf

C, hc или hC

расширенный

Функции wscanf

c, lc или lC

расширенный

Функции scanf

C, lc или lC

Для чтения строк с использованием функций scanf и wscanf используйте вышеуказанную таблицу с спецификаторами формата s и S вместо c и C.

См. также

Ссылки

scanf, _scanf_l, wscanf, _wscanf_l