[fpc-pascal] eof strangeness
John Coppens
john at jcoppens.com
Wed May 3 06:37:53 CEST 2006
On Tue, 02 May 2006 14:42:00 -0400
Bob Richards <bob at tamara-b.org> wrote:
> John Coppens wrote:
>
> > program testeof;
> >
> > begin
> > if eof then
> > writeln('EOF found')
> > else
> > writeln('No EOF found');
> > end.
> >
> > This sample program doesn't return till <enter> is pressed.
>
> That's correct and reasonable. You are terminating your program after
> an EOL (ENTER), If you send it an EOF ^d it also responds reasonably.
>
> $ ./testeof
> ^d entered at kybd
> EOF found
Hi Bob...
I see your reasoning, but I do not understand why eof doesn't return
always. The eof is not a 'wait for eof', but a test. If we're _not_ at
the end of the file, the program should return with false, at least how I
understand it.
program test1;
var
v: integer;
begin
if not eof then begin
write('Wait for input ');
readln(v);
end;
end.
the eof call here, makes the program invert it's output, as the eof waits
for the buffer to be filled (so the number is already on the screen) then
outputs the 'Wait for input' text. It doesn't feel right...
I guess the eof call is superfluous here, but it wouldn't be so illogical
if the input channel is redirected (eg. from a file).
Thanks for your input (pun intended ;-)
John
More information about the fpc-pascal
mailing list