Вопрос по readln (fin);

Простая программа решения квадратного уравнения:

program quadratic в ABC .NET 3.8.2

var
  a, b, c, x1, x2, d: real;
  fin: char;

begin
  repeat
    writeln('Введите а,b и с');
    write('a='); read(a);
    write('b='); read(b);
    write('c='); read(c);
    d := sqr(b) - 4 * a * c;
    if d < 0 then writeln('Нет решения')
    else
    begin
      x1 := (-b + Sqrt(d)) / 2 * a;
      x2 := (-b - Sqrt(d)) / 2 * a;
      writeln('x1=', (x1):0:2, '; x2=', (x2):0:2);
    end;
    writeln('Продожить?(y-да, n-нет)');
    readln(fin);
    readln(fin); // <---
  until fin = 'n';
  writeln('bye-bye')
end.

Чтобы она работала, необходимо продублировать readln(fin); Если нет, readln(fin); проскакивается без остановки. Почему?

Наверно там символ конца строки остается, от нажатия Enter после ввода с.
Если бы везде было readln, то наверно не было бы такой проблемы.

1 лайк

Когда-то рекомендовали для выбора Y/N использовать fin := ReadKey; что-бы без нажатия Enter’a использовать

https://www.freepascal.org/docs-html/rtl/crt/readkey.html