我是Ada编程的初学者,我有以下代码:
PROCEDURE ask(variable: OUT myType) IS
BEGIN
Put("Enter : ");
Get(variable);
Skip_Line;
EXCEPTION
WHEN OTHERS => RAISE wrongInput;
END ask;
此程序要求输入内容并将其放入我的“变量”变量中(该类型是包含从“1”到“3”的字符的myType)。
当输入不正确时,我引发异常。
现在我想在输入为'm'时做其他事情。
我怎么能这样做?
答案 0 :(得分:2)
更改myType
的声明:
type myType is ('1', '2', '3', 'm');
答案 1 :(得分:1)
这个答案基于myType
声明为
subtype myType is Character range '1' .. '3';
您可以将输出写入无约束Character
变量,然后检查它:
PROCEDURE ask (variable : OUT myType) IS
Input : Character;
BEGIN
Put ("Enter : ");
Get (Input);
Skip_Line;
CASE Input IS
WHEN 'm' =>
RAISE gotM;
WHEN OTHERS =>
-- this will raise Constraint_Error if the value is not
-- in range '1' .. '3'
variable := Input;
END CASE;
EXCEPTION
WHEN OTHERS => RAISE wrongInput;
END ask;
我使用case
而不是简单if
,因为听起来未来可能会添加其他输入值。虽然这在技术上是可行的,但我认为它是不好的样式,因为它使用异常gotM
来实现非异常行为。您应该重新考虑您的代码布局,以便您没有只能返回ask
但需要处理其他输入的过程'1' .. '3'
。
答案 2 :(得分:1)
也许这样的事情? (只是在这里猜测,"我想做别的事情"非常模糊)。
procedure Ask (Variable : out My_Type) is
begin
loop
begin
Put ("Enter :");
Get (Variable);
Skip_Line;
return;
exception
when others =>
Skip_Line;
Put_Line ("invalid.");
end;
end loop;
end Ask;