Добрый вечер!!!
Решил с дочкой позаниматься. Написали следующий код
BEGIN
VAR D : STRING := 'N';
VAR (A,B,P):=(0,0,0);
WHILE D='N' DO
begin
CONSOLE.Write('Введите длину прямоугольника ');
while not TryRead(A) do
Println('Неверный ввод. Повторите');
CONSOLE.Write('Введите высоту прямоугольника ');
while not TryRead(B) do
PrintLn ('Неверный ввод. Повторите');
P:=(A+B)*2;
CONSOLE.WriteLine('Периметр прямоугольника равен '+ P);
CONSOLE.Write('Завершить работу программы? N - Нет Y - Да ');
D:=CONSOLE.ReadLine(); //Пришлось добавить, что бы закрыть старый поток
D:=CONSOLE.ReadLine();
CONSOLE.Clear();
end;
END. ```
В конце пришлось написать одну и туже команду два раза, чтобы закрыть поток. Иначе чтение с клавиатуры пролетает мимо.
Вопрос - можно это исправить как то по другому?
Удивительно. Сначала Вы упорно рветесь для чего-то работать через консоль (“Мы не ищем легких путей!”), а затем ищете способ эту консоль закрыть… Вы уверены, что TryRead чистят буфер? А если нет - Вы снова наступили на все те же грабли с чтением символьных переменных и строк.
Согласен, наступили на те же грабли.
Функция TryRead понравилась хотели попробовать её использовать.
Помня прошлое сразу сообразили в чем дело, но к сожалению функции TryReadLine не существует.
Я же правильно понимаю???
@Slava213406, вы не теми кавычками код выделяете. Надо использовать ```, эти смволы находятся за ё в англ. раскладке.
А зачем вам? TryRead всё равно срабатывает только на Enter. В теории можно несколько чисел через пробел ввести. Но и так работать будет, только криво выведет запросы ввода.
Ещё - зачем вы используете CONSOLE.Write? Тут обычное Write с тем же успехом подойдёт. Ну и конкретно тут - лучше строку-приглашение передавать в TryRead, вторым параметром.
И старайтесь объявлять переменные не в начале программы, а перед первым использованием.
Если начинать писать со слова Consol. то появляется контекстная подсказка - очень удобная для начинающих кто плохо помнит написание функций, но помнящие начало, первую букву.
begin
var x: integer;
while not TryRead(x, 'Введите x:') do
'Надо ввести число!'.Println;
x.Sqr.Println;
end.
Кстати, подсказки анализатора кода (как по точке) это не только для новичков. В этом же примере я сделал вывод через .Println и возведение в квадрат через .Sqr.
Если использовать то что показывает по точке - код быстрее пишется, потому что много букв можно автоматически довставлять. Ну и это в целом более современно. По крайней мере выглядит так)
И все равно огромное спасибо!!!
Дочка довольная, программа получилась компактной, нам нравится.
BEGIN
VAR D : STRING := 'N';
WHILE D='N' DO
begin
VAR (A,B):=(0,0);
'Введите длину прямоугольника '.Print;
while not TryRead(A)do
'Неверный ввод. Повторите'.Print;
'Введите высоту прямоугольника '.Print;
while not TryRead(B)do
'Неверный ввод. Повторите'.Print;
$'Периметр прямоугольника равен {(a+b)*2}'.Println;
Println;
Readln;
'Завершить работу программы? N - Нет Y - Да '.Print;
Readln(D);
CONSOLE.Clear();
end;
END.
Да вы правы этот модуль для рисунков. Есть пара процедур для вывода текстов. Функций и процедур для чтения клавиатуры не вижу. Может посоветуете что то?
Я не понимаю Вашей цели и, как следствие, путей достижения. Считаю, что новичкам осваиваться надо в обычном оконном режиме и не лезть в консоли, графику и т.п. Поэтому и в книгах своих обхожу вопросы работы за пределами IDE.
… и теперь у Вас еще вопросы по работе с User Forms прибавятся.