Ĺadny brzuch
Podczas pisania programu natrafiłem na pewien problem. "Wyciągnąłem" go więc do elementarnego programu, który obrazuje ten błąd, żeby go tu zamieścić:
var b:longword; procedure error; begin writeln('blad'); readln; halt; end; begin {$i-} readln(b); {$i+} if ioresult<>0 then error; writeln(b); end.
problem jest taki, ze readln w procedurze error po prostu nie działa (program zachowuje się tak jakby go tam w ogóle nie było). Co jest tego powodem i jak można temu zaradzić?
Byłbym wdzięczny za odpowiedź.
Przede wszystkim usuń halt;
Ale przecież procedura halt wywołana jest po procedurze readln, więc raczej nie powinna mieć tu nic do czynienia przed naciśnięciem entera?
A po za tym usuniecie halta nic nie zmienia (oczywiście oprócz tego, że program nie zamyka się od razu), readln w procedurze wciąż nie działa.
EDIT: Właśnie zauważyłem, że problem rozwiązuje dwukrotne wywołanie procedury readln. wtedy druga już działa.
Wciąż tylko nie wiem zbytnio dlaczego. ;f
Użytkownik Arsen edytował ten post 27 listopad 2008, 20:53
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
var b:longword; procedure error; begin writeln('blad'); readln; halt; end; begin {$i-} readln(b); {$i+} if ioresult<>0 then error; writeln(b); end.
problem jest taki, ze readln w procedurze error po prostu nie działa (program zachowuje się tak jakby go tam w ogóle nie było). Co jest tego powodem i jak można temu zaradzić?
Byłbym wdzięczny za odpowiedź.
Przede wszystkim usuń halt;
Ale przecież procedura halt wywołana jest po procedurze readln, więc raczej nie powinna mieć tu nic do czynienia przed naciśnięciem entera?
A po za tym usuniecie halta nic nie zmienia (oczywiście oprócz tego, że program nie zamyka się od razu), readln w procedurze wciąż nie działa.
EDIT: Właśnie zauważyłem, że problem rozwiązuje dwukrotne wywołanie procedury readln. wtedy druga już działa.
Wciąż tylko nie wiem zbytnio dlaczego. ;f
Użytkownik Arsen edytował ten post 27 listopad 2008, 20:53