Помощь - Поиск - Пользователи - Календарь
Полная версия: Как прервать выполнение процедуры?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Лёва
Это процедура редактирования матрицы.
После запуска процедуры на экране появляется сообщение и возможность ввода данных
Мне необходимо сделать так чтобы выполнение процедуры завершалось при нажатии на Esc
т.е происходило как бы отслеживание нажатия на ESC в процессе выполнения процедуры.
чтобы можно было либо ввести данные либо нажать на ESC и завершить ввод.
Иными словами smile.gif по сценарию После ввывода на на экран сообщения, пользователь сразу вводит данные
но нужно чтобы он мог нажать на ESC чтобы заверить процедуру, а дальше уже по тексту.

procedure Edit;
var i,j,ior,c:integer;
y:char;

begin
writeln(#13,#10,#10'Для редактирования введите адрес ячейки i/j формат ввода i<пробел>j');
repeat
{$I-}read(i,y,j);{$I+}
ior:=IOResult;
if ior<>0 then Write(#13,#10,#10'Необходимо ввести числовое значение, повторите ввод - ')
until ior=0;
if (a[i,j]=1) then
a[i,j]:=0
else
a[i,j]:=1;
end;
Yevgeny
Можешь вставить вот такой цикл:


Var
arrow: char;


Repeat arrow:=readkey;
...
Until arrow=#27; {esc}



Ну, или просто по ифу на выход в начале текста процедуры...
volvo
Цитата
Можешь вставить вот такой цикл:
Да? И что это тебе даст? А если я ввожу число, а не Esc, тогда что, ты будешь просить ввести еще раз? Ничего подобного... Человек начал вводить число, значит надо принимать его ввод...

Лёва
procedure Edit;
var
i, j: integer;
ch: char;
err_i, err_j: integer;
s: string;

begin
writeln('enter i<space>j');
repeat
ch := readkey;

if ch = #27 then exit;
write(ch);

readln(s); s := ch + s;
val(copy(s, 1, pos(#32, s) - 1), i, err_i);
val(copy(s, pos(#32, s) + 1, 255), j, err_j);
if err_i + err_j > 0 then writeln('enter numbers');
until err_i + err_j = 0;

writeln('i = ', i);
writeln('j = ', j);
{ дальше делай с i, j все что хочешь... }
end.

Yevgeny
Да, я вижу свою ошибку, volvo, но... если он уже начнёт делать ввод, то уже не сможет выйти нажатием ESC по твоему коду, или тебе это не надо Лёва??? unsure.gif
andriano
Если стандартная процедура ввода по каким либо причинам не устраивает, стандартный метод решения - написать свою. В данном случае вводить текст в строку посимвольно. При нажатии на Esc - выходить из процедуры, а при нажатии на Enter - преобразовывать строку в число.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.