Другие языки программирования и технологии

Зачем в Паскале есть read и readln, если read тоже переводит строку, хотя по идее не должен?

Joker000
Joker000
3 871
readln - забирает значение из буфера ввода в параметр очищает полностью буфер ввода с клавиатуры
а read - забирает значение из буфера ввода в параметр и не очищает в буфер, а оставляет значение!! !
перевод строки при вводе автоматический - везде
т. е. readln - безопасный ввод
read- небезопасный ввод
пример:
var
a,b: integer;
begin
read(a); {пользователь ввёл : 4, 5 a = 4}
{в буффере ввода число 5 !!!}
read(b); {здесь он ввёл число: 6, но b = 5)
{в буффере ввода так и осталось число 6!!!}
-------
readln(a);{пользователь ввёл : 4, 5; a = 4}
{буффер ввода чист !!!}
readln(a);{пользователь ввёл число 6 и b = 6}
{буффер ввода чист !!!}
readln(b);
end.
Димас ...
Димас ...
6 976
Лучший ответ
Димас ... в С конечно такого нет
там всё проще намного
Можно объяснить проще, без особых заморочек:
При выполнении процедуры read значение следующего данного читается из этой же строки, а при выполнении процедуры readln значение следующего данного читается с новой строки.
Поэтому оператор Readln (b1,b2,...bn); обеспечивает ввод данных в СТОЛБИК.
После ввода каждой переменной b1, b2, ..bn курсор переходит к началу новой строки.
Оператор Read(b1,b2,...bn); обеспечивает ввод данных в СТРОКУ
Joker000 Но ведь при использовании read строка всё-равно переводится! Вы имеете в виду, что при использовании read можно вводить несколько переменных через запятую, а в readln нельзя?
Тут что-то Дмитрий разошелся, да не верно. И про полностью очищенный и не очищенный буфер и про безопасность. Сали тоже не верно ответил. Никаких там столбцов и строчек, совсем другие правила.

Во первых эти процедуры работают не только с вводом с консоли, поэтому нужны две функции.

procedure Read(F, V1 [, V2,...Vn ] );
читает все V1..Vn из потока (ровно n параметров) , все прочитанные данные будут удалены. Все что будет после эти данных, останется без изменений.

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

Если читать char, то в зависимости от установок может быть прочитан символ новой строки как char(26)

При чтении чисел пропускаются все пробелы, табы, переходы строк. И следующее чтение начнется с символа идущего после прочитанного числа. Опять же ненужные символы могут быть пропущены.

procedure ReadLn([ var F: Text; ] V1 [, V2, ..Vn ]);
читает из потока V1, Vn(т. е работает как read) а потом пропускает все символы до новой строки включительно. Все символы после перехода строки останутся без изменений.

Переход на новую строку осуществляется, потому что вы Enter в консоли нажимаете.

Про безопасность за уши притянуто. Это функции с разным назначениями. Любое неправильное их использование не безопасно, любое правильно соответственно безопасно.
Андрей Пюрко
Андрей Пюрко
1 535
вы далбаебы надо так писать read -этот что то begin-далее var-что то
вы придурки!!!!