Процедуры ввода


Для ввода исходных данных пользователем вручную с клавиатуры в языке программирования Паскаль используются процедуры ввода Read и Readln.

Возможны следующие способы записи указанных процедур:

· Read (A1, A2, …, AK);

· Readln (A1, A2, …, AK);

· Readln;

Первая запись реализует чтение К значений исходных данных и присваивание этих значений переменным А1, А2, …, АК. Вторая запись реализует чтение К значений исходных данных, пропуск остальных значений до начала следующей строки, присваивание считанных значений переменным А1, А2, …, АК. Третий оператор реализует пропуск строки исходных данных.

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

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

Пример: Запрос у пользователя 2-ух вещественных и 2-ух целых значений, а также 2-ух символов.

var x, y: real;

a, b: integer;

c1, c2: char;

Read(x, a, c1);

Readln(c2, b, y);

При вводе данных пользователю требуется ввести значение именно того типа данных, который ожидается программой. В случае же, если требуется ввести, например, значение целого типа, а пользователь вводит символ «a», то произойдет исключительная ситуация (т.е. ошибка). В этом случае на экран будет выведено соответствующее сообщение и работа программы будет остановлена, что недопустимо, когда речь идет о «реальных» разработках для заказчика. Программист должен быть готов к таким ситуациям и предусмотреть действия программы на такой случай. Так, можно воспользоваться директивой компилятора I.

Перед вводом данных можно отключить контроль правильности ввода-вывода с помощью записи {$I-}. После осуществления ввода данных с помощью функции IOResult можно самостоятельно проверить корректность последней операции ввода/вывода: если функция возвращает 0, значит, все в порядке, иначе – была ошибка. Обратите внимание: после вызова функции ее результат сбрасывается, а это означает, что повторный вызов функции IOResult, без осуществления новых операций ввода/вывода, всегда будет возвращать значение 0. Если же код ошибки требуется использовать неоднократно, то его следует запомнить в некоторую переменную. Вновь включить контроль правильности ввода-вывода можно с помощью записи {$I-}.

Пример: Организовать ввод целого значения и проверить корректность вводимого значения.

var k, temp: integer;

begin

{$I-}

readln(k);

temp:=IOResult; {запоминаем код ошибки, т.к. IOResult сбросится в 0}

if temp>0 then writeln (‘Ошибка ввода!!!’); {проверяем код ошибки}

{оператор if будет рассмотрен позже}

{$I+}

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

Пример:

writeln (‘Введите длину забора (в метрах, целое значение)’);

write (‘l=’);

readln (l);