From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,680f4c169f5fad47 X-Google-Attributes: gid103376,public From: Stephen Leake Subject: Re: Raising IO_EXCEPTIONS.END_ERROR in a loop Date: 1997/11/19 Message-ID: <347302AE.7DFF@gsfc.nasa.gov>#1/1 X-Deja-AN: 290913445 References: <3472EEAE.65B43D71@silver.jhuapl.edu> Organization: NASA Goddard Space Flight Center -- Greenbelt, Maryland USA Reply-To: Stephen.Leake@gsfc.nasa.gov Newsgroups: comp.lang.ada Date: 1997-11-19T00:00:00+00:00 List-Id: Scott Ingram wrote: > > The following fragment compiles, and even runs correctly through > one iteration but blows up when re-reading a string from standard > input. The exception that is raised makes me think that the > string variable used is still visible the second time through-- > but shouldn't it pass out of existence at the end of the block? > or what am I misunderstanding? > You need to be more precise about what happens - "blows up" is not something my computer does very often :). Does it raise an exception? crash your OS? Are you running on Windows or some other OS? You are using Get_Immediate, which is (unfortunately), system-dependent. What compiler are you using? Jumping way out on a limb, I assume you have the same system I do (Windows 95, GNAT 3.09) (yes, I'll upgrade to GNAT 3.10 one of these days; I was holding out for an ada-aware debugger :( ). I compiled and ran your code, after adding the missing declarations. It works fine, except on this system Get_Immediate doesn't return until the user hits , so you need to add Skip_Line. Hope this helps. > -- > Scott Ingram > Sonar Processing and Analysis Laboratory > Johns Hopkins University Applied Physics Laboratory with Ada.Text_IO; use Ada.Text_IO; procedure Test is OS_Line_Length : constant := 80; Continue : Character := 'Y'; begin loop exit when Continue = 'n' or Continue = 'N'; Get_Variable: declare Variable_Name : String (1..OS_Line_Length); Name_Length : Natural; begin --Get_Variable Put ("Enter the name of the variable to examine: "); Get_Line (Variable_Name, Name_Length); Put_Line ("The variable is set to " & Variable_Name(1..Name_Length)); end Get_Variable; Put ("Examine another (y|Y)? "); Get_Immediate (Continue); Skip_Line; -- added this line -- end loop; end Test; -- - Stephe