Ste*_*ves 27 windows io haskell buffering ghc
我试过这个:
main = do
hSetBuffering stdin NoBuffering
c <- getChar
Run Code Online (Sandbox Code Playgroud)
但它一直等到按下输入,这不是我想要的.我想在用户按下它后立即读取该字符.
我在Windows 7上使用ghc v6.12.1.
编辑:我的解决方法是从GHC转移到WinHugs,它正确支持这一点.
And*_*ewC 21
是的,这是一个错误.这是一个解决方法来保存人们点击和滚动:
{-# LANGUAGE ForeignFunctionInterface #-}
import Data.Char
import Foreign.C.Types
getHiddenChar = fmap (chr.fromEnum) c_getch
foreign import ccall unsafe "conio.h getch"
c_getch :: IO CInt
Run Code Online (Sandbox Code Playgroud)
所以,你可以替换调用getChar
与调用getHiddenChar
.
请注意,这是针对Windows上的ghc/ghci的解决方法.例如,winhugs没有bug,这段代码在winhugs中不起作用.
Art*_*ius 20
可能是一个bug:
http://hackage.haskell.org/trac/ghc/ticket/2189
以下程序重复输入的字符,直到按下退出键.
Run Code Online (Sandbox Code Playgroud)import IO import Monad import Char main :: IO () main = do hSetBuffering stdin NoBuffering inputLoop inputLoop :: IO () inputLoop = do i <- getContents mapM_ putChar $ takeWhile ((/= 27) . ord) i
由于hSetBuffering stdin NoBuffering行,因此不必在按键之间按Enter键.此程序在WinHugs中正常工作(sep 2006版).但是,GHC 6.8.2在按下回车键之前不会重复这些字符.使用所有GHC可执行文件(ghci,ghc,runghc,runhaskell)重现问题,在Windows XP Professional上使用cmd.exe和command.com ...
归档时间: |
|
查看次数: |
4974 次 |
最近记录: |