[fpc-pascal]EOF function

Thomas Schatzl tom_at_work at gmx.at
Thu Sep 11 22:24:39 CEST 2003


> The following (attached) is a programming problem I've implemented.
> Now I know the way I've done the EOF test is not correct, otherwise it
> would not crash with a runtime error of 106.

It doesn't crash here as long as only valid integers are entered. The doc
for RTE 106 reads: "Invalid numeric format: Reported when a non-numeric
value is read from a text file, when a numeric value was expected."

The standard input is never closed during the program - so you will never
get an eof from it (by entering "normal" characters).

> Could someone show me the correct way of reading from stdin until there
> is no more input ?

You have to parse the input yourselves, for example like this (beware:
quick&dirty code and assuming that with "no more input" you mean an empty

procedure ParseString(s : String; var i, j : Integer);
 val(Copy(s, 1, Pos(' ', s)-1), i);
 Delete(s, 1, Pos(' ', s));
 s := TrimLeft(s);
 val(s, j);
 WriteLn(i, ' ', j );

 i: longInt;
 j: longInt;
 s : String;
   readln(input, s);
   s := TrimLeft(TrimRight(s));
   if (s <> '') then begin
    ParseString(s, i, j);
    writeLn(getMaxCycle(i, j));
 until (s = '');

This is required when using stdin only - on normal text files the eof is
reported properly and your way of reading in data using read(ln) works. (As
long as the input is correct).


More information about the fpc-pascal mailing list