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


scanf Символы полей типа

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

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

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

Символ Ожидаемый тип входных данных Тип аргумента Аргумент размера в безопасной версии?
c Символ. При использовании с функциями scanf определяет однобайтовый символ; при использовании с функциями wscanf определяет расширенный символ. Символы-разделители обычно пропускаются при чтении, если указано значение c . В отличие от других полей типа, описатель ширины поля указывает точное количество символов, а не максимальное. Для считывания следующего однобайтового символа, отличного от пробельного, используйте %1s; для считывания следующего расширенного символа, отличного от пробельного, используйте %1ws. Указатель на char при использовании с функциями scanf , указатель на wchar_t при использовании с функциями wscanf . Обязательный. Размер не включает пробел для конца null.
C Символ противоположного размера. При использовании с функциями scanf определяет расширенный символ; при использовании с функциями wscanf определяет однобайтовый символ. Символы-разделители обычно пропускаются при чтении, если указано значение C . В отличие от других полей типа, описатель ширины поля указывает точное количество символов, а не максимальное. Для считывания следующего однобайтового символа, отличного от пробельного, используйте %1s; для считывания следующего расширенного символа, отличного от пробельного, используйте %1ws. Указатель на wchar_t при использовании с функциями scanf , указатель на char при использовании с функциями wscanf . Обязательный. Аргумент size не содержит пробела для конца null.
d Десятичное целое число. Указатель на int.
i Целое число. Шестнадцатеричное число, если входная строка начинается с "0x" или "0X", восьмеричное число, если строка начинается с "0"; в противном случае — десятичное число. Указатель на int.
o Восьмеричное целое число. Указатель на int.
p Адрес указателя в шестнадцатеричном виде. Максимальное количество цифр зависит от размера указателя (32 бита или 64 бита), который зависит от архитектуры компьютера. "0x" и "0X" принимаются как префиксы. Указатель на void*.
u Десятичное целое число без знака. Указатель на unsigned int.
x Шестнадцатеричное целое число. Указатель на int.
e, , EFfg,G Число с плавающей запятой, состоящее из необязательного знака (+ или –), последовательности из одной или нескольких десятичных цифр, содержащей десятичную запятую, и необязательной экспоненты ("e" или "E"), за которой следует целое число со знаком (необязательным). Указатель на float.
a, A Значение с плавающей запятой, состоящее из последовательности один или нескольких шестнадцатеричных цифр, содержащее дополнительную десятичную запятую, и экспонента ("p" или "P"), за которой идет десятичное значение. Указатель на float.
n Нет данных, прочитанных из потока или буфера. Указатель на int, по которому сохраняется число символов, успешно прочитанных из потока или буфера до этой точки в текущем вызове функции scanf или wscanf .
s Строка, до первого символа-разделителя (пробела, знака табуляции или новой строки). Чтобы считывать строки, не разделенные пробелами, используйте набор квадратных квадратных скобок ([ ]), как описано в scanf спецификации ширины. При использовании с функциями scanf обозначает массив однобайтовых символов; при использовании с функциями wscanf обозначает массив расширенных символов. В любом случае массив символов должен быть достаточно большим для поля ввода и автоматически добавляемого завершающего нуль-символа. Обязательный. Размер включает место для завершающего нуль-символа.
S Строка символов противоположного размера, до первого символа-разделителя (пробела, знака табуляции или новой строки). Чтобы считывать строки, не разделенные пробелами, используйте набор квадратных квадратных скобок ([ ]), как описано в scanf спецификации ширины. При использовании с функциями scanf обозначает массив расширенных символов; при использовании с функциями wscanf обозначает массив однобайтовых символов. В любом случае массив символов должен быть достаточно большим для поля ввода и автоматически добавляемого завершающего нуль-символа. Обязательный. Размер включает место для завершающего нуль-символа.

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

char string1[11], string2[9];
scanf_s("%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_lwscanf_wscanf_l