Программирование на C и C++

Онлайн справочник программиста на C и C++

Модификаторы формата

Как функция printf() так и функция scanf() допускают наличие нескольких спецификаторов формата, немного изменяющих ввод.

Спецификаторы формата могут содержать модификатор максимальной длины поля. Это целое число, помещаемое между % и спецификатором формата, ограничивающее число символов, читаемых в поле. Например, для чтения не более 20 символов в str следует написать:

scanf("%20s", str);

Если поток ввода содержит более 20 символов, последующее обращение к вводу начнется с места, где было завершено предыдущее обращение. Например, если ввести

ADCDEFGHIJKLMNOPQRSTUVXYZ

в ответ на запрос функции scanf(), приведенной в предыдущем примере, только 20 символов (включая букву «Т») поместится в str из-за наличия спецификатора максимальной ширины поля. Это означает, что оставшиеся символы UVWXYZ не были использованы. Если вызвать еще одну scanf(), например:

scanf("%s", str);

то буквы UVWXYZ поместятся в str. Ввод в поле может окончиться до достижения максимальной длины поля, если обнаружится специальный символ. В данном случае scanf() переходит к следующему полю.

Для чтения длинных целых следует поместить l перед спецификатором формата. Для чтения коротких целых следует поместить h перед спецификатором формата. Данные модификаторы могут использоваться с кодами формата d, i, о, u и x.

По умолчанию спецификаторы f, е и g сообщают scanf() о необходимости присвоения данных переменной типу float. Если поместить перед одним из этих спецификаторов l, то scanf() присвоит данные переменной типа double. Использование L сообщает scanf() о необходимости интерпретации полученных данных как long double.