Главная страница » Чем read отличается от readln

Чем read отличается от readln

  • автор:

Чем read отличается от readln

Приветствую. Сегодня я хотел бы затронуть тему операторов ввода данных.

  1. read
  2. readln

Ничего не напоминает? Те, кто внимательно читали предыдущую статью, скажут что эти операторы похожи на операторы вывода. И будут правы! Оператор readln отличается от оператора read только лишь тем, что после ввода данных переводит курсор на следующую строку

Возьмем для примера задачу №1 из первого урока. В ней, если вы помните, длину и ширину прямоугольника мы непосредственно вбивали в код программы. Сейчас мы немного поколдуем над кодом и сделаем так, чтобы эти данные можно было вводить с клавиатуры каждый раз при запуске программы.

Для этого вместо куска кода пишем

Попробуйте теперь запустить программу с измененным кодом. На всякий случай напишу весь код:

Заметили, как теперь при запуске программа ждет ввода данных? И пока ввод не будет осуществлен, она не продолжит выполнение. Но согласитесь, это мы с вами знаем, что при запуске программы нужно ввести значения длины и ширины, а кто-то другой, запустив ее, не догадается до этого. Поэтому нам нужно вывести на экран просьбу, что-то вроде «Введите длину». Для этого используем оператор вывода write. О нем я уже писал в предыдущем уроке.

Ход ваших рассуждений при составлении программы должен быть примерно следующим:
1) Мне нужно попросить пользователя ввести значения ширины прямоугольника. Для этого использую оператор вывода: writeln(‘Введите ширину прямоугольника’);
2) Теперь нужно чтобы программа прочитала это значение. Для этого использую оператор ввода: readln(A);

Здесь немного остановимся. Возможно у вас возник вопрос: «А что значит буква А в скобках?» Так вот, в скобках вы указываете ту переменную, которой будет присвоено значение, введенное с клавиатуры. В нашем случае ширину мы записываем в переменную А, следовательно и в скобках пишем ее.
3) Далее мне нужно попросить пользователя ввести длину. По аналогии с первым пунктом:
writeln(‘Введите длину прямоугольника’);
4) Считываем введенное значение по аналогии со 2-ым пунктом: readln(B);

Вот и все, соберем весь код в кучу:

Запустите программу, посмотрите как она выполняется. На мой взгляд чего-то не хватает. Как думаете? Следует выводить на экран что-то типа «Ответ» или «Периметр language-pascal»>write(P); строку: write(‘Периметр =’);

2) Модернизировать предпоследнюю строчку кода write(P) . Делается это следующим образом: пишем оператор write, открываем круглую скобку, в одинарных кавычках пишем ‘Периметр = ‘, ставим запятую и после нее пишем переменную P. Вот как это будет выглядеть: write(‘Периметр = ‘,P);

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

Процедуры Read и ReadLn

Процедуры Read и ReadLn выполняют чтение информации из устройства стандартного ввода. В консольных приложениях этим устройством может быть, например, клавиатура (точнее — введённые с клавиатуры данные), в графических приложениях — файл на диске.

То есть эти процедуры являются “антиподами” процедур Write и WriteLn — выполняют противоположные им действия.

Процедуры Read и ReadLn выполняют схожие действия. Основное отличие между ними следующее: процедура ReadLn после завершения ввода выполняет перевод строки (а в случае с файлами читает файл строка за строкой). А процедура Read читает данные подряд — без перевода строки.

В Турбо Паскале я не помню такого (может просто забыл), но в FreePascal ввод с клавиатуры можно выполнять только процедурой ReadLn, а процедура Read почему-то не работает.

Синтаксис для вывода на консоль:

procedure Read(Args: Arguments);

Синтаксис для вывода в файл:

procedure Read(var F: Text; Args: Arguments);

Аргументами (Arguments) могут быть переменные разных типов. Если используется несколько переменных, то они перечисляются через запятую. Например:

Как уже было сказано, при вводе с консоли эти переменные могут быть разных типов. Но, в отличие от процедур Write/WriteLn использовать константы не допускается (и это логично))).

ВАЖНО!
При вводе данных следует учитывать, что в случае, если введённое пользователем значение имеет тип, отличный от типа переменной, в которую вводится это значение, то возникнет ошибка времени выполнения. Если, например, в указанном выше примере пользователь в качестве первого числа введёт вещественное значение (такое как 3.14), то программа завершится аварийно, так как переменная х имеет целый тип.

При чтении из файла можно работать как с типизированными файлами, так и с текстовыми файлами.

Если F (см. синтаксис) — это типизированный файл, то переменные, передаваемые как параметры (Args) должны иметь такой же тип, какой указан для файла F. Нетипизированные файлы использовать не допускается. Если параметр F не указан, то предполагается, что чтение выполняется из стандартного устройства ввода.

Если файл F имеет тип Text, то переменные должны иметь тип Char, Integer, Real или String.

Если при чтении файла нет данных, доступных для чтения, то в переменную F возвращается пустое значение (0 — для порядковых типов, пустая строка — для строковых).

В случае использования процедуры ReadLn, то есть при построковом чтении данных, конец строки обозначается определённой последовательностью символов (какими именно — зависит от операционной системы, для DOS/Windows это два символа — #10 и #13).

Маркер конца строки не является частью прочитанной строки и игнорируется.

Если во время выполнения процедуры Read/ReadLn происходит ошибка, то генерируется ошибка времени выполнения. Такое поведение не всегда приемлемо (например, во время чтения файла). Поэтому в каких-то случаях генерацию ошибок отключают. Сделать это можно с помощью директивы компилятора .

В разных отладочных и учебных программах процедуру ReadLn часто используют для того, чтобы консольное приложение не закрылось автоматически после выполнения. Для этого в конце программы просто записывают (как в примере выше):

То есть просто имя процедуры без параметров. В этом случае программа будет ожидать нажатия клавиши ENTER. Следовательно, программа не завершится, пока не будет нажата клавиша ENTER, и это позволит увидеть результат работы программы. Разумеется, в операционной системе DOS (и подобных) такой проблемы нет. Это актуально только для Windows.

Чем read отличается от readln

The procedures read and readLn retrieve data from a text file (such as input , the command line interface, or any file on disk). They are defined as part of the Pascal programming language. Everyone can expect them to work no matter which compiler has been used.

In property definitions the reserved word read is used to direct read access. This article deals with the procedures read and readLn . See object and related articles for the occurrence of read in the context of properties.

Contents

Behavior

Signature

Read as well as readLn share almost the same identical formal signature. However a formal signature is omitted here, since you can not write their signatures in Pascal. Therefore a description follows:

As an optional first parameter a text variable can be specified where data are read from. Read is additionally capable of reading from a typed file variable ( file   of   recordType ).

If no source is specified, input is assumed. Thereafter any number of variables can be specified, but at least one has to be present. They have to be either char , integer , real , or string . If you have specified a typed file as the source, all variables have to be of the file’s underlying base type.

Earlier versions of FPC also allowed reading variables of the type PChar . This has been removed, since no buffer checking is possible with those. In the case of typed files as source, only variables of the file’s record type can be specified.

Execution

Calling read / readLn will place the read (and possibly accordingly interpreted) values to the given variables.

The order of variables matters. For instance, when the following program:

is supplied with:

everything is fine.

i will become 42 and c will become 'x' . But the reverse input order

will yield a run-time error (in this case RTE 106).

Once data are read and stored, they are “consumed”, thus cannot be retrieved otherwise, but via the variables only. However, data are read up to the variable’s size limits. E. g. a fixed length string [ 24 ] will stop reading beyond the 24th character.

Leading blanks in front of numeric types are skipped.

If the source file is not open, the RTE 103 “file not open”, RTE 6 “invalid file handle” (for input in a non-ISO compiler mode) will stop the program. These RTE may be converted to an eInOutError exception if the sysUtils unit is included (e. g. via a uses -clause).

If the source file is open, but no data is available, possibly because the end of file has already been reached, default values for the remaining variables are loaded.

Interpretation

Read and readLn are so powerful, because they interpret given data. For instance, a readLn storing an integer does not expect the binary value to be entered, but their decimal representation with ASCII numerals suffices (e. g. 42 instead of * [asterisk has the numeric value 42]).

While char and string can be stored (sort of) directly, the numeric types integer and real are converted following certain rules. The rules are those, you normally write literals of such types within your (Standard) Pascal source code. However, some compilers’ read implementation (here FPC) allow additional formats:

An integer’s hexadecimal base can be indicated by prepending 0x , or just x (case insensitive) instead of the usual $ (dollar sign).

Difference between read and readLn

ReadLn will in contrast to read consume a trailing line feed. It is discarded and does not have any influence on how to save supplied data. The read line ending is platform-independent. A line ending typical for Windows-platforms will be read and does not pose a problem, even if the program is run on Linux or any other platform.

Note, the notion of “line” applies only for text files. Functions like eoLn and readLn only work on such files. In consequence readLn can not be used on typed files ( file   of   recordType variables).

Production usage

Read and readLn have a major drawback in that they expect the user to supply data in a given order. If users do not comply a run-time error will terminate the program.

This is quite unsatisfactory, since a run-time error number won’t enlighten the end user. You usually want to design your error messages in a way the user is capable in correcting her behavior. When reading ordinal types one can make use of the val procedure.

Beware, it is necessary to check, whether the end of file has been reached before attempting to read data. The text file input may not be open. Unlike readLn no default value is loaded. Hence it is imperative to check val ’s code value in order to determine whether the destination variable v now has a legit value.

Of course, it would be even better to catch wrong key strokes right when they are made, but this is not possible when utilizing read or readLn .

Note: Therefore the main application of read or readLn is non-interactive programs reading (generated) data files.

Nevertheless, if the convenient interpretation functionality is desired, without having a file open, the procedure system . readStr can be used to do so.

Операторы read и readln. Процедуры ввода информации

Операторы read (считывать) и readln, который происходит от двух английских слов read (считывать) и line (строка) используются в программах для ввода информации в память компьютера и «считывания» значений в переменную.

Рассмотрим работу этих операторов и процедур ввода информации.

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

Итак, процедуры read и readln «считывают» значения переменных и присваивают их тем переменным, которые записаны в них.

Таких переменных может быть несколько, тогда они записываются в этих операторах через запятую, например:

read(a, b, c, n, g, j, i), readln(e,f, k, p, d) и т.п.

Чем же отличается работа процедур read и readln?

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

В программе: write(‘Введите значения a и b ‘); read(a, b);

write(‘Ввод информации в одну строку’);

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

Введите значения a и b 2 3 Ввод информации в одну строку

writeln(‘Введите значения a, b и c); readln(a, b, c);

writeln(‘Ввод и вывод информации с начала строки’);

Введите значения a, b и c

Ввод и вывод информации с начала строки

Арифметические операции с целыми числами. Переменные целого типа. Вещественный тип

В языке Паскаль используются целые числа, к которым относятся все натуральные числа, образовавшиеся в процессе подсчета предметов: 1, 2, 3, 4, 5, 6, . ; отрицательные числа: . -6, -5, -4, -3, -2, -1 и число ноль: 0. Целые числа образуют следующий ряд:

. -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, .

В Паскале допускается диапазон целых чисел от -32768 до 32767.

Переменные, принимающие целые значения, записываются в разделе описаний с указанием типа integer (целый).

Например: var a, b, c, a1, b34, nomb: integer;

Значения другого типа этим переменным в одной программе присвоить нельзя.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *