спецификация ширины scanf

Эти сведения могут применяться к интерпретации строк форматирования scanf семейство функций, в том числе как безопасные версии scanf_s.Обычно эти функции принимают, что входной поток состоит из последовательности маркеров.Токены разделяются пробелами (пробел табуляции, перевода строки) или, в случае численных типов, естественным концом типа цифровых данных, как показано первого символа, который не может быть преобразован в numeric текста.Однако спецификация ширины может использоваться, чтобы проанализировать ввода остановить перед концом естественным токена.

Ширина спецификация состоит из знаков между % описатель и поля типа, который может содержать положительное целое число, называемого ширина поле и один или несколько знаков, указывающий размер поля, который может также считаться, что модификаторы типа полей, например указание на то, является ли тип integer Краткое OR long.Эти символы называются префикс размера.

Поле ширина

ширина десятичное поле положительное целое число, управляющий максимальное количество символов, считываемых для этого поля.Не больше ширина знаки преобразованы и сохраняются на соответствие argument.Меньше ширина символы могут быть прочитаны, если знак пробел (пробел, вкладка " или перевода строки) или символ, который не может быть преобразован в соответствии с заданным форматом происходит перед ширина достигает.

Спецификация ширины и определена отдельно от аргумента размер буфера не требуется защищенность версиями этих функций (т е scanf_s" wscanf_sи т д).В следующем примере создается спецификация шириной 20, означает, что до 20 символов быть чтение из входного потока.Длина буфера 21, которая включает места для возможных 20 символов, а также символ конца строки null:

char str[21];
scanf_s("%20s", str, 21);

Если ширина поле не используется, scanf_s пытается прочитать весь токен в строку.Если заданный размер не хватает для размещения всего маркер, ничего не будет записан в строке назначения.Если ширина указано поле, затем первое ширина символы в токене будут записаны в целевой строке вместе с нулевым терминатором.

Префикс размера

Необязательные префиксы H" l" ll" I64и л отображает размер argument (знак длинных или коротких, единый-байта или расширенный символ, в зависимости от знака типа, они изменяют).Эти символы используются с символами типа в формат-спецификации scanf OR wscanf функции, чтобы определить интерпретации аргументов, как указано в следующей таблице.Префикс типа I64 расширения Майкрософт и не является совместимости ANSI.Символы типа и их содержание описаны в "символах для типа scanf таблицу внутри функции" символы поля типа scanf.

ПримечаниеПримечание

H" lи л префиксы расширения Майкрософт при использовании с данными типа char.

Префиксы размера описателей Формат-Типа scanf и wscanf

Указать

Используйте префикс

с описателем типа

double

l

б" Б" f" Иили И

long double (эквивалентно double)

L

б" Б" f" Иили И

int, long

l

d" i" o" xили X

long unsigned int

l

u

long long

ll

d" i" o" xили X

short int

h

d" i" o" xили X

unsigned int, short

h

u

int64

I64

d" i" o" u" xили X

Символ с Единый-байта scanf

h

c OR C

Символ с Единый-байта wscanf

h

c OR C

Расширенный символ с scanf

l

c OR C

Расширенный символ с wscanf

l

cили C

Единый-байт - строка символов с scanf

h

s OR s

Единый-байт - строка символов с wscanf

h

s OR s

Строка символов с scanf

l

s OR s

Строка символов с wscanf

l

s OR s

В примерах H и l с scanf_s функции и wscanf_s функции:

scanf_s( "%ls", &x, 2 );     // Read a wide-character string
wscanf_s( "%hC",&x, 2 );    // Read a single-byte character

При использовании функции в unsecure scanf семейство, опущен параметр размера, указывающий длину буфера предыдущего аргумента.

Считывание строк Undelimited

Чтение строки, разделенные знаками пробела, не набора символов (в брекетах[]может быть заменено для) s (строка) введите знак.Набор символов в брекетах называется строка элемента управления.Соответствующее поле ввода чтение до первого символа, который не появляется в строку элемента управления.Если первый символ в наборе курсора (**^**эффект применяется). Поле ввода чтение до первого символа, который отображается на остальную часть кодировки.

Обратите внимание, что % [a-z] и % [z-a] рассматривать как эквивалент % [abcde… z].Это общее scanf расширение функции, но не видит, что стандарт ANSI он требуется.

Чтение Unterminated строки

Для хранения строки без хранения конечного нуль-символ (" \ 0 "), используйте спецификацию %nc где n десятичное целое число.В этом случае c символ типа показывает, что аргумент указатель на массив символов.Следующее n символы считываются из входного потока в указанное место, и нуль-символ (" \ 0 ") не добавляется.If n не указан, его значение по умолчанию 1.

При остановке чтения поле scanf

scanf функция просматривает каждое поле ввода, символ знаком.Она может прекратить считать указанное поле ввода, прежде чем он достигает пробел для различных причин:

  • Достигается предельная заданную ширину.

  • Следующий символ не может быть преобразован, как указано.

  • Следующий символ совпадает с символом в строке элемента управления, полагают, что соответствует.

  • Следующий символ не появляется в заданном кодировку.

Если по какой-либо причине scanf считается, что функция останавливает начинается чтение поле ввода, следующее поле ввода на первом непрочитанном символа.Конфликтующие символ, если он имеется, то считается непрочитанной и первый символ следующего поля ввода или первый символ в последующих операциях чтения во входном потоке.

См. также

Ссылки

scanf, _scanf_l, wscanf, _wscanf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Поля спецификации формата: функции и wscanf scanf

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