1

我需要实线,直到按下 ESC 按钮。我怎样才能检查它?

lines
   = do
      line <- getLine
      if (== "/ESC") --this condition is wrong
         then ...
         else do
            ln <- lines
            return ...

有人可以解决我的问题吗?

4

1 回答 1

4

正确的转义方法是使用反斜杠,字符是'\ESC',所以条件是

if line == "\ESC"

但我不确定每个终端都会通过'\ESC'应用程序。

如果您想在按下键时立即停止ESC,则类似于

module Main (main) where

import System.IO

main :: IO ()
main = do
    hSetBuffering stdin NoBuffering
    getUntilEsc ""

getUntilEsc :: String -> IO ()
getUntilEsc acc = do
    c <- getChar
    case c of
      '\ESC' -> return ()
      '\n' -> do putStrLn $ "You entered " ++ reverse acc
                 getUntilEsc ""
      _ -> getUntilEsc (c:acc)

是你需要的。您必须按字符阅读,并且需要关闭 的缓冲stdin,因此字符可以立即可供阅读,而不仅仅是在输入换行符之后。

请注意,在 Windows 上关闭缓冲不起作用。不知道最近有没有修复。此外,正如@Daniel Wagner 报告的那样,很可能是 Windows 命令提示符没有将 传递ESC给应用程序。

于 2012-06-11T19:41:52.560 回答