Thread View: pl.comp.lang.c
2 messages
2 total messages
Started by Borneq
Sat, 14 May 2016 14:14
Dziwne zachowanie feof
Author: Borneq
Date: Sat, 14 May 2016 14:14
Date: Sat, 14 May 2016 14:14
17 lines
1361 bytes
1361 bytes
Tłumaczyłem przykład z Pascala na C i nie działał w C. W końcu okazało
się że to było spowodowane dziwnym działaniem feof.
Jeśli plik ma 100 bajtów i pozycja w pliku wynosi 100 to Pascal
stwierdzi że jest koniec pliku, natomiast feof nie! Trzeba dopiero
spróbować coś przeczytać i ma się nie udać.
Jak to obejść? Na razie mam funkcję:
bool Eof(FILE *fp)
{
long long curpos = ftell(fp);
fseek(fp, 0, SEEK_END);
long long endpos = ftell(fp);
if (curpos == endpos)
return true;
else
fseek(fp, curpos, SEEK_SET);
}
Re: Dziwne zachowanie feof
Author: keiichi
Date: Sat, 14 May 2016 18:49
Date: Sat, 14 May 2016 18:49
24 lines
1889 bytes
1889 bytes
W dniu 2016-05-14 o 16:14, Borneq pisze: > Tłumaczyłem przykład z Pascala na C i nie działał w C. W końcu okazało > się że to było spowodowane dziwnym działaniem feof. Zachowanie nie jest dziwne. Te funkcje są w obu językach inaczej zdefiniowane. feof w C zwraca wartość różną od zera jeśli poprzednia operacja osiągnęła koniec pliku, ale sama nie próbuje czytać. Eof w Pascalu wykonuje próbę odczytu (ale nie zmienia bieżącego położenia w pliku) i zwraca True lub False w zależności od osiągnięcia końca pliku. > Jeśli plik ma 100 bajtów i pozycja w pliku wynosi 100 to Pascal > stwierdzi że jest koniec pliku, natomiast feof nie! Trzeba dopiero > spróbować coś przeczytać i ma się nie udać. > Jak to obejść? Odpowiednikiem pascalowego eof powinno być coś takiego: int ch = getc(fp); if (ch == EOF) return 1; ungetc(ch, fp); return 0; Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads