我的程序像

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/

10-14 04:14