Hi,

> 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
line):

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

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

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).

Hth,
  Thomas


_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to