【问题标题】:Haskell - putStr vs putStrLn and instruction order [duplicate]Haskell - putStr vs putStrLn 和指令顺序
【发布时间】:2014-03-18 04:20:57
【问题描述】:

假设我们有一个简短的 haskell 程序:

main = do putStr "2 + 2 = "
          x <- readLn
          if x == 4
             then putStrLn "Correct"
             else putStrLn "Wrong"

它产生什么输出?

4

2 + 2 = 正确

现在让我们再来一个:

main = do putStrLn "2 + 2 = "
          x <- readLn
          if x == 4
             then putStrLn "Correct"
             else putStrLn "Wrong"

那个产生

2 + 2 =

4

正确

粗体 4 是用户输入的。

任何熟悉 Haskell 的人可以向我解释为什么会这样吗? 以及如何获得想要的结果,即

2 + 2 = 4

正确

【问题讨论】:

    标签: haskell io output


    【解决方案1】:

    行缓冲。在写入完整的文本行之前,不会“刷新”输出缓冲区。

    两种解决方案:

    1. 手动刷新缓冲区。 (putStr 后跟 hFlush stdout。)
    2. 关闭缓冲。 (hSetBuffering stdout NoBuffering.)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 2013-10-17
      • 2015-09-19
      • 2023-03-14
      • 2017-12-10
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多