验证用户输入的内容

时间:2013-10-28 11:36:45

标签: ada

我是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'时做其他事情。

我怎么能这样做?

3 个答案:

答案 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;