🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

2 total messages Started by Borneq Sat, 14 May 2016 14:14
Dziwne zachowanie feof
#308557
Author: Borneq
Date: Sat, 14 May 2016 14:14
17 lines
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
#308558
Author: keiichi
Date: Sat, 14 May 2016 18:49
24 lines
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