Jeszcze jedna rzecz, którą robi read(liczba). Po wczytaniu pierwszego znaku, który nie jest już liczbą "zwraca" go z powrotem do "strumienia". W języku c taką funkcją jest ungetc.
Ten mój test był tylko przykładem i ilustracją do tego o czym pisałem i oczywiście należało go dokładnie przeanalizować i przemyśleć.
Nie mogę tego przetestować, ale wg mnie ten ostatni program mógłby wyglądać np tak:
[bbone=fpc,938]program abc;
var
liczba:LongInt;
begin
while true do
begin
read(liczba);
if eof then break;
if liczba = 0 then writeln('zero');
end;
end.[/bbone]
Natomiast, wcześniejszy można by poprawić np wg poniższego opisu.
Re: Wczytywanie i wypisywanie danych w Pascalu
To oczywiście nie jest jedyny sposób. Cały problem we wcześniejszym rozwiązaniu polega na tym, że najpierw sprawdzamy czy jest już eof - jeszcze przed próbą wczytania a potem próbujemy coś wczytać. To że wypisuje ci zero, przy pustej linii, to dlatego, że jest też inicjalizacja zmiennych wartością zero.
PS
Ktoś mi podesłał prawidłowy tag do pascal w bbone i teraz mogę testować swoje pomysły.
Okazuje się, że jednak read(liczba) nie do końca robi to o czym myślałem. Nie robi ungetc(c) i dlatego nadal jest problem z wczytywaniem w pascalu. Jest jeden sposób, zapamiętywanie ostatnio wczytanej linii i porównywanie czy wczytano inną, przy ustawionym eof - ale takie rozwiązanie za bardzo mi się nie podoba.Może jest jakiś inny sposób.
PS 2
Teraz mogłem przetestować i wygląda, że jednak read(liczba), zeruje liczbę przed wczytaniem nowej wartości