在Eiffel控制台应用程序中读取密钥

时间:2016-07-06 22:08:33

标签: console console-application eiffel

Windows上的Eiffel中是否有来自.NET的Console.ReadKey

我需要一种从控制台读取输入的方法,而无需等待用户按Enter键。

无法使用函数io.read_character,因为它会阻塞,直到用户按Enter键。

1 个答案:

答案 0 :(得分:1)

正如在SO(herehere)以及elsewhere的答案中所解释的那样,没有便携式方法可以在不等待的情况下从控制台读取字符。但是,您可以通过连接到Eiffel的外部代码轻松使用链接中列出的任何方法。以下示例演示了如何在Windows上执行此操作:

read_char: CHARACTER
        -- Read a character from a console without waiting for Enter.
    external "C inline use <conio.h>"
        alias "return getch ();"
    end

然后可以从代码中调用功能read_char作为常规功能:

        from
            io.put_string ("Press q or Esc to exit.")
            io.put_new_line
        until
            c = 'q' or c = '%/27/'
        loop
            c := read_char
            io.put_string ("You pressed: ")
            if c = '%U' or c = '%/224/' then
                    -- Extended key is pressed, read next character.
                c := read_char
                io.put_string ("extended key ")
                io.put_natural_32 (c.natural_32_code)
            else
                io.put_character (c)
            end
            io.put_new_line
        end