Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Пропуск нежелательных специальных символов

Специальный символ в управляющей строке заставляет scanf() пропустить один или несколько специальных символов из потока ввода. Специальные символы - это пробел, табуляция, вертикальная табуляция, перевод формата или новая строка. В сущности, один специальный символ в управляющей строке заставляет функцию scanf() прочитать, но не сохранить любое число (включая ноль) специальных символов до первого обычного символа.

Обычные символы в управляющей строке

Обычные символы в управляющей строке заставляют функцию scanf() читать и отбрасывать соответствующие символы из потока ввода. Например, "%d,%d" заставляет функцию scanf() прочитать целое число, прочитать и пропустить запятую, а затем прочитать другое целое число. Если указанный символ не найден, функция scanf() завершает работу. Если необходимо прочитать и пропускать знак процента, надо использовать в управляющей строке %%.

В scanf() следует передавать адреса

Все переменные, используемые для получения значений из scanf(), должны передаваться в виде адресов. Это означает, что все аргументы должны быть указателями на переменные, используемые как аргументы. Вспомним, что в С это стандартный способ создания передачи по ссылке и он позволяет функции изменять содержимое аргумента. Например, для чтения целого в переменную count надо использовать следующий вызов scanf(): scanf ("%d", & сount); Строки будут читаться в массивы символов, причем имя массива (без индексов) является адресом первого элемента массива. Таким образом, для чтения строки в символьный массив str следует использовать: scanf ("%s", str); В данном случае str является указателем и нет необходимости ставить перед ним оператор &.

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

Как функция 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]