Hi

Your problem is the consequence of how ReadLn(Longint) works. When you enter 'g' + Enter, ReadLn reads 'g', then ReadLn raises runtime error (this causes EInOutError exception), but Enter is still left unread (it stays in internal Input buffer). That's why the next ReadLn ("ReadLn (tmpLabel);") returns immediately (and sets tmpLabel to '').

Simplest workaround is to not use ReadLn(Longint), use only ReadLn(String) and do convertion String -> LongInt explicitly. Like this:

  tmpNumTracksStr: AnsiString;

  ...

  ReadLn (tmpNumTracksStr);
  Try
    tmpNumTracks := StrToInt(tmpNumTracksStr);
  Except
    On E: EConvertError do tmpNumTracks := 0;
  End;

  ...

or even simpler:

  ReadLn (tmpNumTracksStr);
  tmpNumTracks := StrToIntDef(tmpNumTracksStr, 0);

--
Michalis

kractor wrote:
having some problems with exception handling that have me pretty confused .... i'll include below the entire procedure where the exception handling occurs ...

    Procedure procAddNewAlbum;
        Var
            tmpAlbumName : AnsiString;
            tmpAlbumID : Longint;
            tmpNumTracks : Smallint;
            tmpLabel : AnsiString;
            tmpYear : Integer;
        Begin
            Write ('album name: ');
            ReadLn (tmpAlbumName);
            tmpAlbumID := ID_Generator;
            Write ('tracks: ');
            Try
                ReadLn (tmpNumTracks);
            Except
                On E: EInOutError do tmpNumTracks := 0;
            End;
            WriteLn ('tmpNumTracks = ',tmpNumTracks);
            Write ('label: ');
            ReadLn (tmpLabel);
            Write ('year: ');
            Try
                ReadLn (tmpYear);
            Except
                tmpYear := 0;
            End;
        End;

now, if i enter anything for tmpNumTracks that's not numeric (and therefore raises the exception) the following happens ...

    album name: test
    tracks: g
    tmpNumTracks = 0
    label: year: ^C

the exception code appears to be executed, but when the program "exits" the exception block it seems to be processing one line, then skipping one, then proceeding as normal ... i don't *think* i've made any syntax mistakes, and if i have i'm going to look rather silly ... :D

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


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

Reply via email to