[FreePascal]Program sam sie zamyka, a przecież jest readln


(M4thy5) #1
USES CRT;

var

iloczyn,liczba1,liczba2:integer;


BEGIN

clrscr;

write('podaj pierwszą liczbę: ');

read(liczba1);

writeln;

writeln;

write('podaj drugą liczbę: ');

read(liczba2);

writeln;

writeln;


iloczyn:=liczba1*liczba2;

writeln('iloczyn: ',iloczyn);

delay(2000);

clrscr;

gotoxy(30,30);

write('do widzenia');

readln; {dlaczego sie wylacza? jest przecież readln;}

END.

Na końcu jest readln a sie wyłącza samo. Gdy dopiszę jeszcze jedno readln i jest:

readln;

readln;

to wtedy nie zamyka sie.

Dlaczego musi być podwójne readln by sie nie wyłączało? Może mi to ktoś wytłumaczyć?

Na stronach z kursami pascala napisane jest by dopisać readln; zawsze na końcu by program sie nie zamykał sam.


(Murzyn1) #2

Buforowanie stdin/stdout/stderr :slight_smile: szukaj czegoś takiego jak fflush w C (http://pl.wikibooks.org/wiki/C/fflush)


([alex]) #3

Po wczytaniu liczby przez read w buforze klawiatury zostaje to co było po tej liczbie jeżeli nawet po niej nie było nic to zostaje przynajmniej znak , następny readln wczytuje tą resztę nie czekając na nic.

Użyj readln zamiast read lub readkey zamiast readln.