ProProgrammer napisał(a)
Jak w Free Pascalu mogę wywołać procedure w procedurze za pomoca jakiegoś klawisza..?
Środowisko tutaj nie ma nic do rzeczy; Liczą się jedynie nazwy wbudowanych procedur / funkcji, które w zależności od środowiska mogą się różnić;
Wracając do tematu to jednym ze sposobów jest ustawienie pętli na wczytywanie znaków z klawiatury (np. UpCase(ReadKey)
) i sprawdzanie w bloku wyboru co to za znak;
Np.:
repeat
cKey := UpCase(ReadKey);
case cKey of
'G': Graj();
'P': Pomoc();
#27: Wyjscie();
end;
until cKey = #27; {#27 - Escape}
W momencie wciśnięcia klawisza Escape
zostaje wywołana procedura Wyjscie()
, a po jej wykonaniu pętla zostaje zakończona, co oznacza w większości przypadków zakończenie pracy programu;
Jeśli chodzi o wyjście z procedury / funkcji nie wychodząc od razu z programu - są dwa sposoby, które robią często to samo, ale nie do końca; Masz dwie procedury - Break i Exit;
Break
Jeśli użyjesz w pęli Break
, wyjdziesz tylko z pętli, nie z procedury / funkcji; Czyli:
procedure Foo();
var
I: Word;
begin
for I := 0 to 99 do
if I = 99 then
Break;
WriteLn('Wyjście z pętli.');
end;
Napis Wyjście z pętli
zostanie wyświetlony w oknie konsoli; W takim jednak przypadku:
procedure Foo();
var
I, J: Word;
begin
for I := 0 to 4 do
begin
WriteLn('Pętla I');
for J := 0 to 4 do
if J = 2 then
Break
else
WriteLn('Pętla J');
end;
WriteLn('Wyjście z pętli.');
end;
wyjdziesz jedynie z pętli J
, jeśli J = 2
; Więc napis Pętla I
zawsze wyświelony zostanie 5
razy, a Pętla J
zawsze 2
razy;
Exit
Ta procedura powoduje wyjście z procedury / funkcji; Zawsze, nawet jeśli będzie w dziesięciu zagnieżdżonych pętlach; W takim razie:
procedure Foo();
var
I, J, K: Word;
begin
for I := 0 to 9 do
for J := 0 to 4 do
for K := 0 to 99 do
if (I = 2) and (J = 2) and (K = 49) then
Exit;
WriteLn('Wyjście z pętli.');
end;
napis Wyjście z pętli.
nigdy nie zostanie wyświetlony; Przeanalizuj to sobie;