Wejście/wyjście i błąd z CRT

0

Witam!
Fragment kodu:

Read(X);
Readln(Y);

Nie jest on jak widać bardzo skomplikowany :P

Przekierowuję na standardowe wejście plik dane.in w taki sposób:
program.exe < dane.in z "windowej" linii komend.
Zauważyłem jednak, że niekiedy program działa, a niekiedy "zawiesza się" (nie tyle zawiesza, co dochodzi do momentu Read(X) i nie wczytuje danych z pliku (klawiatury też) jakby dalej czekał na dane wejściowe).

Okazało się, że nie działa po dodaniu:
USES Crt;
Bez tego modułu przekierowanie działa jak powinno.

W jaki sposób moduł ten zmienia wejście, wyjście? Trzeba użyć jakichś funkcji dodatkowych?
Pozdrawiam

Aha. Dodam, że kompilator to Free Pascal 2.0.4

0

**Problem rozwiązany! **
Skoro udało mi się to zrobić, to podzielę się nim.

Zamiast kodu:

Read(X);
Readln(Y);

Należy umieścić taki kod:

Var
Pliczek : TextFile

Assign(Plikczek,' ');
Reset(Pliczek);
Read(Pliczek,X);
Readln(Pliczek,Y);
Close(Pliczek);

Pewnie dla niektórych początkujących kod: Assign(Plikczek,' ');
Może być niezrozumiały, ale ' ' oznacza tutaj standardowe wejście, czyli plik nie jest czytany z pliku na dysku, tylko np. z klawiatury.

Bez modułu Crt normalnie standardowe wejście powinno działać tak: Read(X), jednak kiedy chcemy użyć tego modułu trzeba to zrobić w zaprezentowany powyżej sposób.

Proszę o ewentualną moderację lub komentarz bardziej doświadczonych forumowiczów.
Pozdrawiam

1

Okazało się, że nie działa po dodaniu:
USES Crt;

tak jest od czasów Turbo Pascala, i we Free Pascalu jest tak samo.
Bo jaki ma sens dodawanie modułu CRT, jeśli chcesz przekierowywać IO?
Do czekania na klawisz? Ale wtedy przecież nie wiesz czy program czeka na klawisz czy się zawiesił ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1