-- Demonstrates exception handling in a loop
-- Loop continues after exception is handled
-- Begin-exception-end is similar to a java try-catch
with ada.text_io; use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure excep2 is
n: Natural;
s: Natural := 0;
c: Character;
begin
while not end_of_file loop
excep:
begin -- A begin-end block can be added anywhere
get(n);
put_line("n: " & n'img);
s := s + n;
exception
when data_error =>
put_line("Data error: You must enter a number!");
-- A non-numeric character in input raised the exception.
-- The character that caused the exception is still
-- in the input, and so we read it:
get(c);
put_line("c=<" & c & ">");
when constraint_error => -- Negative value in the input
put_line("Constraint error: You must enter an non-negative value!");
end excep; -- End begin-end block
put_line("Repeat the loop");
end loop;
put_line("Sum: " & s'img);
end excep2;
-- Input:
--|1a2-ab3c4-55d6-77 8 9
-- Output:
--|n: 1
--|Data error: You must enter a number!
--|c=<a>
--|n: 2
--|Data error: You must enter a number!
--|c=<a>
--|Data error: You must enter a number!
--|c=<b>
--|n: 3
--|Data error: You must enter a number!
--|c=<c>
--|n: 4
--|Constraint error: You must enter an non-negative value!
--|Data error: You must enter a number!
--|c=<d>
--|n: 6
--|Constraint error: You must enter an non-negative value!
--|n: 8
--|n: 9
--|Sum: 33