[fpc-pascal]exception handling
Jonas Maebe
jonas.maebe at elis.ugent.be
Sun Mar 21 15:02:07 CET 2004
On 21 mrt 2004, at 14:56, kractor wrote:
>> begin
>> readln(A);
>> NewAlbum.Year:=StrToIntDef(A,0);
>> write('label: ');
>> readln(NewAlbum.alLabel);
>> write('tracks: ');
>> readln(NewAlbum.NumTracks);
>>
>> This avoids the exception.
>>
> just wondering if there's been any progress on this? not trying to
> pressure or anything, more curious as to what the actual problem was
> if its been discovered yet ... also wondering if anyone else had this
> problem besides me?
The problem is simply that "readln" is split into "read" and
"readline_end". The former reads whatever you want to read, the latter
consumes the end-of-line. The ioresult is checked after both
operations. If the read already returned an error, then an exception
will be raised, so the readln_end is never executed.
That's the way readln (and writeln) was implemented from the start in
FPC. I don't know if there's an elegant solution possible, or that it
requires to change the whole way we handle it (e.g. passing a boolean
to each internal read routine that notes whether or not it should
consume everything till the end of the current line, no matter what
happens).
Jonas
More information about the fpc-pascal
mailing list