comp.lang.ada
 help / color / mirror / Atom feed
From: csampson@inetworld.net (Charles H. Sampson)
Subject: Re: Something I don't understand
Date: Thu, 13 Feb 2014 23:05:22 -0800
Date: 2014-02-13T23:05:22-08:00	[thread overview]
Message-ID: <1lh13qj.bxt340j5wwdoN%csampson@inetworld.net> (raw)
In-Reply-To: ad687a22-84c1-4c7d-bf8d-023fda30d849@googlegroups.com

<adambeneschan@gmail.com> wrote:

> On Thursday, February 13, 2014 3:57:58 PM UTC-8, Laurent wrote:
> > Hi
> > 
> > 
> > 
> > Doing an exercise from the book "Ada 95 Problem Solving and Program Design".
> > 
> > I am supposed to make a robust function to read some values. It works so
> > far but there is one thing I don't understand.
>  
> >    MaxName : CONSTANT Positive := 30; -- defined in other package 
> >    SUBTYPE NameType IS String (1 .. MaxName); -- defined in other package
> > 
> >    Count : Natural RANGE 1.. MaxName;
> >
> >          Name : LOOP
> >                BEGIN --exception handler block               
> >                     Ada.Text_IO.Put ("Name (1 - ");
> >                     Ada.Integer_Text_IO.Put (Item => MaxName,Width => 1);
> >                     Ada.Text_IO.Put(Item => " characters) >");
> >                     Ada.Text_IO.Get_Line (Item => S, Last => Count);
> >                     Item.Name (1 .. Count) := S (1 .. Count);  
> >                     Ada.Text_IO.Skip_Line;
> > 
> >                EXIT; -- correct Name
> > 
> >             EXCEPTION
> >                WHEN Constraint_Error =>
> >                   Ada.Text_IO.Skip_Line;
> >                   Ada.Text_IO.Put (Item => "Name too short/long!");
> >                   Ada.Text_IO.New_Line;
> > 
> >             END; -- exception handler
> > 
> >          END LOOP Name;
> > 
> > 
> > 
> > 
> > 
> > So when I enter nothing as name I get a Constraint_Error which is
> > handled. That's ok but when the name I enter is longer than 30 chars no
> > exception. Is that normal and if yes/no why?
> 
> Yes, because that's how the *procedure* Get_Line is defined.  It stops
> reading when it reaches the end of the string, or the end of the line.
> (RM A.10.7(18-20))
> 
> If you want to check for input that is too long, you can use the
> *function* Get_Line, which always reads to the end of the line:
> 
>     declare
>         Input : String := Ada.Text_IO.Get_Line;
>     begin
>         if Input'Length <= NameType'Length then
>             Item.Name (1 .. Input'Length) := Input;
>             --Ada.Text_IO.Skip_Line;  --you shouldn't need this, Get_Line will
>                                       --automatically perform this
>             exit Name;  -- correct name
>         else
>             Ada.Text_IO.Put_Line (Item => "Name too long!");
>             -- combination of Put and New_Line
>         end if;
>     end;  -- this ends the block starting with "declare"

     It should be mentioned that in the OP's version the extra
characters aren't discarded. They're still there to be "gotten" on the
next use of Get or Get_Line. As Mr. Beneschan hinted in his comment
above, if you want to get rid of them you need to call Skip_Line.

     Just another example of Ada not doing things behind the scene.

                        Charlie
-- 
Nobody in this country got rich on his own.  You built a factory--good.
But you moved your goods on roads we all paid for.  You hired workers we
all paid to educate. So keep a big hunk of the money from your factory.
But take a hunk and pay it forward.  Elizabeth Warren (paraphrased)


  reply	other threads:[~2014-02-14  7:05 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-13 23:57 Something I don't understand Laurent
2014-02-14  0:18 ` adambeneschan
2014-02-14  7:05   ` Charles H. Sampson [this message]
2014-02-15 15:27   ` Laurent
2014-02-15 19:10     ` Laurent
2014-02-15 20:05       ` Niklas Holsti
2014-02-15 21:16         ` Laurent
2014-02-15 21:40       ` Jeffrey Carter
2014-02-16  1:39       ` Robert A Duff
2014-02-16  9:08         ` Text_IO, was: " Simon Clubley
2014-02-16  9:43           ` Dmitry A. Kazakov
2014-02-16 16:57             ` Dennis Lee Bieber
2014-02-16 16:17           ` Robert A Duff
2014-02-17 12:52             ` Simon Clubley
2014-02-17 15:32               ` G.B.
2014-02-17 15:35                 ` G.B.
2014-02-17 17:34                 ` Mike H
2014-02-17 16:59               ` Niklas Holsti
2014-02-17 17:17                 ` Dmitry A. Kazakov
2014-02-17 17:42                   ` Niklas Holsti
2014-02-17 19:55                     ` Dmitry A. Kazakov
2014-02-18  7:14                       ` Niklas Holsti
2014-02-18  8:40                         ` Dmitry A. Kazakov
2014-02-18  9:00                           ` Niklas Holsti
2014-02-18  9:31                             ` Dmitry A. Kazakov
2014-02-19  8:36                               ` Niklas Holsti
2014-02-19  9:40                                 ` Dmitry A. Kazakov
2014-02-19 13:20                                   ` Niklas Holsti
2014-02-19 14:13                                     ` Dmitry A. Kazakov
2014-02-19 15:37                                       ` Georg Bauhaus
2014-02-19 16:32                                         ` Laurent
2014-02-19 17:46                                           ` Simon Clubley
2014-02-20  2:39                                         ` Dennis Lee Bieber
2014-02-20 11:44                                           ` G.B.
2014-02-19 21:45                                       ` Niklas Holsti
2014-02-20  9:52                                         ` Dmitry A. Kazakov
2014-02-20 18:19                                           ` Niklas Holsti
2014-02-19 15:06                                     ` Robert A Duff
2014-02-19 17:03                                       ` Niklas Holsti
2014-02-19 22:30                                         ` Robert A Duff
2014-02-17 18:13                 ` Simon Clubley
2014-02-17 20:09                   ` Dmitry A. Kazakov
2014-02-18  7:50                     ` Georg Bauhaus
2014-02-18  8:28                       ` Dmitry A. Kazakov
2014-02-17 20:22                   ` Niklas Holsti
2014-02-18  0:50                     ` Simon Clubley
2014-02-18  6:56                       ` Niklas Holsti
2014-02-18  8:04                         ` Georg Bauhaus
2014-02-19 22:01                     ` Robert A Duff
2014-02-20  8:25                       ` Dmitry A. Kazakov
2014-02-20 15:54                         ` Robert A Duff
2014-02-20 17:54                           ` Dmitry A. Kazakov
2014-02-20 20:45                       ` Niklas Holsti
2014-02-19 21:52                   ` Robert A Duff
2014-02-20  0:50                     ` Simon Clubley
2014-02-19 21:46                 ` Robert A Duff
2014-02-20  0:09                   ` Jeffrey Carter
2014-02-20  1:09                     ` Simon Clubley
2014-02-20  7:06                       ` Niklas Holsti
2014-02-20 13:05                         ` Simon Clubley
2014-02-20 11:51                       ` G.B.
2014-02-20 12:53                         ` Simon Clubley
2014-02-21 11:50                       ` Brian Drummond
2014-02-23 21:37                         ` AdaMagica
2014-02-23 23:23                           ` Bill Findlay
2014-02-24  4:29                           ` AdaMagica
2014-02-24 12:22                           ` Brian Drummond
2014-02-24 19:03                             ` AdaMagica
2014-02-20 20:02                   ` Niklas Holsti
2014-02-19 21:15               ` Robert A Duff
2014-02-19 22:01                 ` Simon Clubley
2014-02-16 14:50         ` Mike H
2014-02-17 16:09         ` Laurent
2014-02-17 17:42           ` Mike H
2014-02-18  1:05             ` Dennis Lee Bieber
2014-02-17 22:31           ` Jeffrey Carter
2014-02-19 12:51             ` Laurent
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox