Ошибки, происходящие от незнания различия между Read и Readln

После компиляции и запуска экзешника консоль не ставится на паузу по readln Снимок

А вот так работает Снимок2

У меня не воспроизводится. Вы точно используете последнюю версию? Попробуйте обновить.

Вот копируемый код, чтоб от руки не писать каждый раз.

begin
  var n := ReadlnInteger('введите n: ');
  var a := ArrRandomReal(n,0,10);
  a.Select(x->frac(x)).Print;
  a.Select(x->frac(x)).Aggregate((x,y)->x*y).Print;
  readln;
end.

Первая строка отличается. У вас ReadlnInteger, у меня ReadInteger. Ваш работает правильно. Почему не работает с ReadInteger?

И в этом коде такая же байда, тут то где?

А, действительно…

Выше посмотрите еще скрин с суммой квадратов, там тоже readln не стопорит консоль. А там такая же ситуация похоже.

Да что вы все продолжаете стабильно “ловиться” на одно и то же? Ну сказано же в Писании, что Readln уничтожает в буфере всяческие следы нажатия “Enter” (chr 13, chr 10), а Read оставляет их в буфере. Когда вы считываете числовое данное, это роли не играет, а для символов и строк критично. Потому последний Read консоль и не стопорит, что он с пустым аргументом, т.е. ждет нажатия клавиши и читает char - ему хватает получить не уничтоженные следы прошлого ввода из буфера.

Что там дедушка Крылов писал? “Неча на зеркало пенять…” :stuck_out_tongue_winking_eye:

И правильно сделает!

P.S. На аватарке - это что? Шестикрылый серафим? )))

Духовной жаждою томим,
В пустыне мрачной я влачился, —
И шестикрылый серафим
На перепутье мне явился.

Но тут как раз считывается число а не строка, это ведь только с ReadString работает, нет?

ReadInteger же.

А на аве у меня сам не знаю что. Когда то сам в пеинте нарисовал, сам офигел что вышло. Но мне понравилось)) В том что у меня сзади друзья что только не видели (как листья какой то наркоты), но идея с шестикрылым серафимом мне понравилась))).

P.S.

Где где?

Нет. Число у Вас считывается вначале. А консольный вывод Вы пытаетесь приостановить, указывая Readln без списка ввода. В этом случае ожидается нажатие клавиши, т.е. ввод СИМВОЛА. Если предшествующий ввод был по Read, а не Readln, он оставил в буфере код, сгенерированный нажатием “Enter”. Он будет воспринят и протолкнет работу программы дальше

…В канонах работы системы ввода-вывода в Паскале.

Где то в справке закопано всм или ещё глубже?

Сложно сказать, где именно, но это вещь, которую “знают все”, только забывают часто. В частности, пробегало это и в видеоматериалах С.С. Михалковича. Я это помню еще по ТурбоПаскалю “из 90-х”, когда только пробовал его на “Искре”, “Правеце” и “EC-1840”. (Правец - это был такой болгарский клон IBM PC с очень странно русифицированной операционной системой, которая выдавала фразы типа “ворнинг ми бумага джаммед”).

1 лайк

не туда напсал, сори

Не в ту тему… И всё правильно, массив это дочерний класс от последовательности, а функция Println это функция последовательности.

delete