【问题标题】:Haskell - getLine called before putStr [duplicate]Haskell - 在 putStr 之前调用 getLine [重复]
【发布时间】:2017-12-01 18:35:30
【问题描述】:

当我想在阅读 Haskell 中的输入之前添加一些文本时,我尝试这样写:

putStr "enter value: "
var <- getLine

但是输出需要用户输入才能显示文本:

[input]
enter value: 

当我使用putStrLn 而不是putStr 时,它会按原样显示:

enter value: 
[input]

为什么这两个语句的功能不同?是不是加了换行符?

【问题讨论】:

    标签: haskell


    【解决方案1】:

    putStr "enter value: " 实际上写入一个输出缓冲区,该缓冲区仅在稍后缓冲区变满或找到换行符时才刷新到实际的标准输出。

    这与 C 编程语言中的机制大致相同。

    所以,即使putStr "enter value: "getLine 之前运行,我们也看不到输出消息,感觉不对。

    解决方案是显式刷新标准输出句柄。

    import System.IO
    -- ...
    putStr "enter value: "
    hFlush stdout
    var <- getLine
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-19
      • 2018-08-13
      • 2021-09-17
      • 2014-03-18
      • 2011-03-20
      • 2017-03-07
      相关资源
      最近更新 更多