Ada 95检查输入是否被按下

时间:2014-11-02 08:23:25

标签: ada

我是Ada的新手。

如何检查输入是否被按下?

while循环应该能够检查输入字符是空格还是输入键。

此外,如何检查用户输入类型,例如其他语言的type()typeof()功能?

FUNCTION ReadValue RETURN Unbounded_String IS
      ValueChar : Character;
      Result : Unbounded_String := To_Unbounded_String("NULL");
   BEGIN
      Get(ValueChar);
      Skip_Line;

      WHILE ValueChar /= ';'LOOP
         Get(ValueChar);
         IF IsValidNameInput(ValueChar) THEN 
            Result := Result & ValueChar;
         ELSE
            exit;
         END IF;         
      END LOOP;
      ValueIntegerFlag  := CheckValue(Value);

      RETURN Result;

   END ReadValue; 

1 个答案:

答案 0 :(得分:1)

使用Get_Immediate代替Get - ARM A.10.7(9),在没有特殊ENTER处理的情况下一次一个地阅读字符。

您可以使用Ada.Characters.Handling - ARM A.3.2对您刚读过的角色的类进行检查 - 类似

function Is_Valid_Name_Input (Ch : Character) return Boolean is
begin
   return Ada.Characters.Handling.Is_Graphic (Ch)
     and then not Ada.Characters.Handling.Is_Space (Ch);
end Is_Valid_Name_Input;

(可能不是你想要的,因为它使&*^$$^成为有效的名字!)

Ada.Characters.Handling.Is_Line_Terminator检测到ENTER(在Unix上;也可能在Windows上)。

您可以通过尝试转换并在失败时捕获异常来检查字符串是否对应于整数:

function Check_Integer_Value (Str : Unbounded_String) return Boolean is
   Dummy : Integer;
begin
   Dummy := Integer'Value (To_String (Str));
   return True;
exception
   when Constraint_Error =>
      return False;
end Check_Integer_Value;

关于ReadValue

  • 不要初始化Result - 它以空字符串开头(你真的不想以字符串”NULL”开头)。
  • 它会跳过第一个字符输入。
  • Skip_Line是什么意思?

尝试类似

的内容
function Read_Value return Unbounded_String is
   Value_Char : Character;
   Result : Unbounded_String;
begin
   loop
      Get_Immediate (Value_Char);
      exit when Value_Char = ';';
      if Is_Valid_Name_Input (Value_Char) then
         Result := Result & Value_Char;
      end if;
   end loop;
   return Result;
end Read_Value;