我的程序像
main :: IO String
main = do
putStrLn "input a"
a <- getChar
putStrLn "input b"
b <- getLine
putStrLn "input c"
c <- getChar
return a:c:b
行为:打印“ input a”,程序等待我键入一个Char并按回车键。从那里,它滚动经过getLine,而从未让我输入任何内容。我怎样才能使其达到预期目的?
附注:此代码可能存在更多问题,但让我们关注我当前的问题。
最佳答案
当您按X键然后按Enter键时,您会在键盘缓冲区中找到X\n
。getChar
读取X
但离开\n
。然后getLine
仅读取\n
并立即完成。
您可以在读取\n
之前与另一个getLine
一起读取尾随的b
来清理键盘缓冲区
main :: IO String
main = do
putStrLn "input a"
a <- getChar
getLine --clean kbd buffer
putStrLn "input b"
b <- getLine
putStrLn "input c"
c <- getChar
return (a:c:b)
关于haskell - getLine不会停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35364007/