Как функция printf(), так и функция scanf() допускают наличие нескольких спецификаторов формата, немного изменяющих ввод.
Спецификаторы формата могут содержать модификатор максимальной длины поля. Это целое число, помещаемое между % и спецификатором формата, ограничивающее число символов, читаемых в поле. Например, для чтения не более 20 символов в str следует написать:
scanf(“%20s”, str);
Если поток ввода содержит более 20 символов, последующее обращение к вводу начнется с места, где было завершено предыдущее обращение. Например, если ввести
ABCDEFGHIJKLMNOPQRSTUVWXYZ
В ответ на запрос функции , приведенной в предыдущем примере, в str поместятся только 20 символов (включая «Т») из-за наличия спецификатора максимальной ширины поля. Это означает, что оставшиеся символы UVWXYZ не были использованы. Если вызвать еще одну scanf() , например:
scanf(“%s”, str);
То буквы UVWXYZ поместятся в str. Вод в поле может окончится до достижения максимальной длины поля, если обнаружится специальный символ. В данном случае scanf() переходит к следующему полю.
Для чтения длинных целых следует поместить l перед спецификатором формата. Для чтения коротких целых следует поместить h перед спецификатором формата. Данные модификаторы могут использоваться с кодами формата d, i, o, u и х.
По умолчанию спецификаторы f, e и g сообщают о необходимости присвоения данной переменной типу float. Если поместить перед одним из этих спецификаторов l , то scanf() присвоит данные типу double. Использование L сообщает о необходимости представления полученных данных как long double.