在阿达的keydown

use*_*725 5 ada

当用户按下我的Ada程序中的"escape"键时,我需要执行一些功能.我知道我们可以通过get_line检索他输入的内容,但这并不是我需要做的.实际上,我不想在他进入"逃跑"之前停止该计划.

首先,有可能吗?

Max*_*amy 5

可以使用以下方式获取字符而无需按Enter键:

Ada.Text_IO.Get_Immediate (Answer)
Run Code Online (Sandbox Code Playgroud)

Answer,a Character.

并且转义键是ASCII 27,因此您可以检查是否Character'Pos(Answer)等于27.此外,如在意见提出,也可以比较AnswerAda.Characters.Latin_1.ESC.

这是一个显示"Yeah !!! 1 !! 1!"的程序示例.在循环中直到按下ESC键.

with Ada.Characters.Latin_1;
with Ada.Text_IO;

procedure Test is
    Finished : Boolean := False;

    task Escape_Task;

    task body Escape_Task is
        Answer : Character;
    begin
        loop
            Ada.Text_IO.Get_Immediate(Answer);
            if Answer = Ada.Characters.Latin_1.ESC then
                Finished := True;
                exit;
            end if;
        end loop;
    end Escape_Task;

begin
    while not finished loop
        Ada.Text_IO.Put_Line("Yeahh!!!1!!1!");
    end loop;
end Test;
Run Code Online (Sandbox Code Playgroud)

  • 最好使用[Ada.Characters.Latin_1.ESC](http://www.ada-auth.org/standards/12rm/html/RM-A-3-3.html),或过时的[ASCII.ESC] (http://www.adaic.org/resources/add_content/standards/12rm/html/RM-J-5.html),而不是'Character'Pos(27)`. (2认同)