Форматирование полей спецификации: scanf
и wscanf
функций
Сведения, приведенные здесь, относятся ко всему scanf
семейству функций, включая безопасные версии. В нем описываются символы, используемые для определения scanf
функций анализа входного потока, например входного потока stdin
, в значения, вставляемые в переменные программы.
Аргумент format
представляет собой строку, которая указывает интерпретацию входных данных и может содержать одно или несколько из следующих значений:
Пробелы: пустые (
\t
); или новая строка (\n
). Пробельные символы приводят к тому, что функцияscanf
считывает, но не сохраняет все последовательные пробельные символы во входных данных до следующего символа, отличного от пробельного. Один пробельный символ в формате соответствует любому числу (включая 0) и сочетанию пробельных символов во входных данных.Символы, отличные от пробельных, за исключением символа процента (
%
). Символ, не являющийся пробельным, приводит к тому, что функцияscanf
считывает, но не сохраняет соответствующий непробельный символ. Если следующий символ в входном потоке не соответствует,scanf
завершается.Спецификации формата, начинающиеся со знака процента (
%
). Спецификация формата приводитscanf
к чтению и преобразованию символов входных данных в значение указанного типа. Значение присваивается аргументу из списка аргументов.Спецификация формата имеет следующий вид:
%
[*
][][width
{h
ll
||L
l
|I64
|}]type
Здесь, ,
width
h
l
ll
I64
и представляетscanf
спецификацию ширины иtype
L
представляетscanf
символ поля типа.
format
Строка аргумента считывается слева направо. Ожидается, что символы вне спецификаций форматирования соответствуют последовательности символов в входном потоке. Соответствующие символы в входном потоке сканируются, но не хранятся. Если символ в входном потоке конфликтует со спецификацией формата, scanf
завершается и символ остается в входном потоке, как если бы он не был прочитан.
При обнаружении первой спецификации формата значение первого поля ввода преобразуется в соответствии с этой спецификацией. Это значение хранится в расположении, указанном первым аргументом, который следует аргументу format
. Вторая спецификация формата приводит к преобразованию и хранению второго поля ввода в следующем аргументе и т. д. через конец строки форматирования.
Поле ввода определяется как: все символы до первого символа пробела (пробел, вкладка или новая линия) или до первого символа, который не может быть преобразован в соответствии со спецификацией формата, или до тех пор, пока не будет достигнута ширина поля (если задано). Если для заданной спецификации слишком много аргументов, лишние аргументы вычисляются, но игнорируются. Результаты непредсказуемы, если для спецификации формата недостаточно аргументов.
Каждое поле спецификации формата представляет собой один символ или число, указывающее на определенный параметр формата. Символ type
, который указывается после последнего необязательного поля формата, определяет способ интерпретации поля ввода: как символ, как строка или как число.
Простейшая спецификация формата содержит только символ процента и символ type
(например, %s
). Если за символом процента (%
) следует символ, который не имеет значения в качестве символа элемента управления форматом, этот символ и следующие символы (до следующего знака процента) рассматриваются как обычная последовательность символов. То есть они рассматриваются как последовательность символов, которые должны соответствовать входным данным. Например, чтобы указать, что во входных данных должен присутствовать символ процента, используйте %%
.
Звездочка (*
) за знаком процента отключает назначение следующего поля ввода, которое интерпретируется как поле указанного типа. Поле сканируется, но не хранится в аргументе.
Безопасные версии (те, с суффиксом_s
) scanf
семейства функций требуют, чтобы каждый параметр типа c
, S
C
s
или [
был передан сразу после этого параметр размера буфера. Дополнительные сведения о безопасных версиях scanf
семейства функций см. в разделеscanf_s
, _scanf_s_l
, . wscanf_s
_wscanf_s_l
См. также
scanf
Спецификация ширины
scanf
Символы полей типа
scanf
, , _scanf_l
wscanf
_wscanf_l
scanf_s
, , _scanf_s_l
wscanf_s
_wscanf_s_l