Болталка PascalABC.NET

Добрый вечер!!!
Решил с дочкой позаниматься. Написали следующий код

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, вторым параметром.

И старайтесь объявлять переменные не в начале программы, а перед первым использованием.

Для упрощенного ввода в IDE сделано, наверно, под два десятка функций. Не думаю, что повторять их под мало востребованную консоль - хорошая идея.

Если начинать писать со слова Consol. то появляется контекстная подсказка - очень удобная для начинающих кто плохо помнит написание функций, но помнящие начало, первую букву.

Screenshot_1

Нажмите Ctrl+Space. Это работает и на пустом месте, и после набора части слова (с небольшими различиями).

:+1::+1::+1: Спасибо за эту подсказку!!! Вы прокачали нас сразу на 10 уровней вверх.

Если честно не до конца понятно. Можно наглядно показать?

begin
  var x: integer;
  while not TryRead(x, 'Введите x:') do
    'Надо ввести число!'.Println;
  x.Sqr.Println;
end.

Кстати, подсказки анализатора кода (как по точке) это не только для новичков. В этом же примере я сделал вывод через .Println и возведение в квадрат через .Sqr.
Если использовать то что показывает по точке - код быстрее пишется, потому что много букв можно автоматически довставлять. Ну и это в целом более современно. По крайней мере выглядит так)

Добрый вечер! Что то не получается. Компилятор пишет что нет такой возможности выводить сообщение вторым параметром. Screenshot_2

И все равно огромное спасибо!!! Дочка довольная, программа получилась компактной, нам нравится.

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.

А это зачем?

Что бы при повторном вводе окно очищалось от старых записей

К стати по вашему совету решили уйти от консоли в окно windows. Подключили uses GraphWPF; Будем пробовать.

Пробовать что? Картинки рисовать?

какое окно

Да вы правы этот модуль для рисунков. Есть пара процедур для вывода текстов. Функций и процедур для чтения клавиатуры не вижу. Может посоветуете что то?

Наверно окно консоли.

uses FormsABC; - кажется нашел подходящее…

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

… и теперь у Вас еще вопросы по работе с User Forms прибавятся.