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 , , E F f g ,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
.