Ada 95检查是否按下enter键
我是艾达的新手 如何检查是否按了enter键 while循环应该能够检查输入字符是空白还是回车键 此外,如何检查用户输入类型,如其他语言中的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
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
。对不起,我在回答中没有说明这一点。