|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Ввод данныхВвод данных. Для ввода данных с клавиатуры ЭВМ в программе будем использовать функцию (описана в заголовочном файле stdio.h):
scanf (форматная_строка, список_аргументов);
Функция scanf () выполняет "чтение" кодов, вводимых с клавиатуры. Это могут быть как коды видимых символов, так и управляющие коды, поступающие от вспомогательных клавиш и от их сочетаний. Функция scanf () воспринимает коды, преобразует их во внутренний формат и передает программе. При этом программист может влиять на правила интерпретации входных кодов с помощью спецификаций форматной строки. (Возможность форматирования условно отмечена в названии функции с помощью литеры f в конце имени.) И форматная строка, и список аргументов для функции scanf () обязательны. Форматную строку для функции scanf () будем формировать из спецификаций преобразования вида:
% * ширина_поля модификатор спецификатор
Среди элементов спецификации преобразования обязательны только % и спецификатор. Для ввода числовых данных используются спецификаторы: d - для целых десятичных чисел (тип int); u - для целых десятичных чисел без знака (тип unsigned int); f - для вещественных чисел (тип float); е - для вещественных чисел (тип float). Ширина_поля - целое положительное число, позволяющее определить, какое количество байтов (символов) из входного потока соответствует вводимому значению. Этим элементом мы сейчас не будем пользоваться. Звездочка '*' в спецификации преобразования позволяет пропустить во входном потоке байты соответствующего вводимого значения. (Сейчас, когда уже забыли о подготовке данных на перфокартах и перфолентах, звездочка при вводе почти не используется. Она может быть полезной при чтении данных из файлов, когда нужно пропускать те или иные значения.) В качестве модификаторов используются символы: h - для ввода значений типа short int (hd); I - для ввода значений типа long int (Id) или double (If, le); L - для ввода значений типа long double (Lf, Le). В ближайших программах нам не потребуются ни '*', ни модификаторы. Информацию о них приводим только для полноты сведений о спецификациях преобразования данных при вводе. В отличие от функции printf () аргументами для функции scanf () могут быть только адреса объектов программы, в частном случае - адреса ее переменных. Не расшифровывая понятие адреса (адресам и указателям будет посвящена гл. 4), напомним, что в языке Си имеется специальная унарная операция & получения адреса объекта: & имя_объекта
Выражение для получения адреса переменной будет таким:
& имя_переменной
Итак, для обозначения адреса перед именем переменной записывают символ &. Если name - имя переменной, то &name -ее адрес. Например, для ввода с клавиатуры значений переменных n, z, х можно записать оператор:
В данном примере спецификации преобразования в форматной строке не содержат сведений о размерах полей и точностях вводимых значений. Это разрешено и очень удобно при вводе данных, диапазон значений которых определен не строго. Если переменная n описана как целая, z и х - как вещественные типа float, то после чтения с клавиатуры последовательности символов 18 18 -0.431 переменная n получит значение 18, z -значение 18.0, х - значение -0.431. При чтении входных данных функция scanf () (в которой спецификации не содержат сведений о длинах вводимых значений) воспринимает в качестве разделителей полей данных "обобщенные пробельные символы" - собственно пробелы, символы табуляции, символы новых строк. Изображения этих символов на экране отсутствуют, но у них имеются коды, которые "умеет" распознавать функция scanf (). При наборе входной информации на клавиатуре функция scanf () начинает ввод данных после нажатия клавиши <Enter> (переход на новую строку). До этого набираемые на клавиатуре символы помещаются в специально выделенную операционной системой область памяти - в буфер клавиатуры и одновременно отображаются на экране в виде строки ввода. До нажатия клавиши <Enter> разрешено редактировать (исправлять) данные, подготовленные в строке ввода. Рассмотрим особенности применения функции scanf () для ввода данных и принципы построения простых программ на основе следующих несложных задач вычислительного характера. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |