TEAM-ADA Archives

Team Ada: Ada Programming Language Advocacy

TEAM-ADA@LISTSERV.ACM.ORG

Options: Use Forum View

Use Proportional Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
"Carlisle, Martin" <[log in to unmask]>
Reply To:
Carlisle, Martin
Date:
Sun, 15 Aug 1999 16:14:07 -0600
Content-Type:
text/plain
Parts/Attachments:
text/plain (105 lines)
It's not that they are handled differently, you just have to consider the
state of the input buffer.  For range_error to be raised, the input must
have been consumed from the buffer (because the get completes successfully).
If Data_Error is raised, then the input is NOT consumed from the buffer
(because the Get does not complete successfully).  A Skip_Line is not really
needed-- you could just do a single character get, and hope maybe the next
character was a #.  Skip_Line will disregard the rest of the line of input
(which is admittedly probably the right solution in most cases).

--Martin


-----Original Message-----
From: Rick Duley [mailto:[log in to unmask]]
Sent: Saturday, August 14, 1999 8:15 PM
To: [log in to unmask]
Subject: User-defined and per-defined exceptions


Hi Teamers

        Here's one a CS2 class threw at me the other night.
--
--  procedure Invalid_Data_Loop_Test
--
--  author  : rick duley
--  date    : August 15, 1999
--  purpose : to demonstrate the need for a 'Skip_Line' in an exception
--          :   handler to avoid the program going into an endless
--          :   loop after a 'Get' call when the exception is an Ada
--          :   pre-defined exception but that it doesn't seem to
--          :   matter when the exception is user-defined
--
--          : try entering any character - the program will loop,
--          :   <CTRL,C> will stop it - then try uncommenting the
--          :   'Skip_Line' calls and see what happens
--
--  copyright (c) rick duley 1999
--
with Ada.Text_Io;
procedure Invalid_Data_Loop_Test is

   package My_Integer_Io is new Ada.Text_Io.Integer_Io(Integer);
   AnInteger : Integer := 0;
        Range_Error : exception;

begin  --  Invalid_Data_Loop_Test
   Validation_Loop:
      loop
      Validation_Block:
         begin
         Ada.Text_Io.Put(Item => "Enter an Integer" &
                " between 0 and 100 " &
            "(100 to QUIT) : ");
         My_Integer_Io.Get(Item => AnInteger);

         if AnInteger not in 0 .. 100 then
                raise Range_Error;
           else
              exit Validation_Loop when AnInteger = 100;
           end if;

         Ada.Text_Io.New_Line;
           Ada.Text_Io.Skip_Line;

         Ada.Text_Io.Put(Item => "The number entered was : ");
         My_Integer_Io.Put(Item => AnInteger, Width => 1);
         Ada.Text_Io.New_Line(Spacing => 2);

      exception
           when Range_Error =>
            -- this is where the 'Skip_Line' _is_not_ needed
              -- Ada.Text_Io.Skip_Line;
            Ada.Text_Io.New_Line(Spacing => 2);
            Ada.Text_Io.Put_Line(Item => "You Goofed - Value Range");
            Ada.Text_Io.New_Line;
         when others =>
            -- this is where the 'Skip_Line' _is_ needed
                -- Ada.Text_Io.Skip_Line;
            Ada.Text_Io.New_Line(Spacing => 2);
            Ada.Text_Io.Put_Line(Item => "You Goofed");
            Ada.Text_Io.New_Line;
      end Validation_Block;
   end loop Validation_Loop;
end Invalid_Data_Loop_Test;

Why is it that user-defined exceptions are treated in a different manner
from the pre-defined ones?  What happens to the <LT> character (which I
assume to be remaining in the buffer and causing the loop) in the
Range_Error situation?

--------------------------------------------------------------------------
Rick Duley
Edith Cowan University
Perth, Western Australia

tel: +61 (08) 9370 6619
                                                                   /-_|\
fax: +61 (08) 9370 6100                                           /     \
                                                            perth *_.-._/
"The lonliest place in the world                                       v
                          is the loosin' champ's dressin' room!"
                                                             (Jack Dempsey)
"He wasn't an Ada programmer in Perth!" (Rick Duley) J

ATOM RSS1 RSS2