Ada 95检查是否按下enter键

Ada 95检查是否按下enter键,ada,Ada,我是艾达的新手 如何检查是否按了enter键 while循环应该能够检查输入字符是空白还是回车键 此外,如何检查用户输入类型,如其他语言中的type()或typeof()函数 FUNCTION ReadValue RETURN Unbounded_String IS ValueChar : Character; Result : Unbounded_String := To_Unbounded_String("NULL"); BEGIN Get(Valu

我是艾达的新手

如何检查是否按了enter键

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; 

使用
Get\u Immediate
而不是
Get
-一次读取字符,无需特殊的回车处理

您可以使用
Ada.Characters.Handling
——类似于

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;
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;
(可能不是您想要的,因为它使
和*^$$^
成为一个有效的名称!)

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

  • 不要初始化
    结果
    -它以空字符串开始(并且您确实不希望以字符串
    “NULL”
    )开始)
  • 它跳过第一个字符输入
  • 那是什么意思
试试像这样的东西

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

你真的是说Ada95吗?从那时起事情就开始了。@SimonWright是的,这是ada 95 lol。我想你应该在
ReadValue
之外调用
CheckValue
。对不起,我在回答中没有说明这一点。