【问题标题】:Haskell - Taking input during runtimeHaskell - 在运行时接受输入
【发布时间】:2017-02-28 05:08:40
【问题描述】:

我是 Haskell 的新手,我不知道如何在代码执行期间接受用户的输入。假设我输入此代码:

import System.IO

main = do  
    putStrLn "Hi, what's your name?"  
    name <- getLine  
    putStrLn ("Hi " ++ name)

好吧,我希望文本 "Hi, what's your name?" 出现之前我输入我的名字,然后打印第二行 "Hi, name"之后用户输入他们的名字. 但是,就像现在一样,在我输入我的名字之后, 之前没有任何文本显示。这使得问题变得多余,因为直到用户回答问题后才会将问题呈现给用户。

我知道这可能是一个愚蠢的问题,但我已经在谷歌上搜索了很长时间,但没有成功。感谢您的宝贵时间。

【问题讨论】:

  • 您的代码非常适合我。也许你用错了。你怎么称呼它?
  • 你确定你使用的是putStrLn,而不是putStr吗?听起来像是缓冲问题。

标签: haskell


【解决方案1】:

这可能是由于您系统上的默认缓冲所致。尝试使用hSetBuffering 将缓冲模式显式设置为行缓冲:

main = do
    hSetBuffering stdout LineBuffering
    hSetBuffering stdin LineBuffering
    putStrLn "Hi, what's your name?"  
    name <- getLine  
    putStrLn ("Hi " ++ name)

【讨论】:

  • 当标准输出连接到终端时,AFAIK 行缓冲应该是所有理智实现中的默认设置。如果这可行,我仍然会在其他地方寻找根本原因。
  • 这解决了它,谢谢。和@user2847643,我会调查的。
猜你喜欢
  • 1970-01-01
  • 2014-08-19
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2011-10-24
相关资源
最近更新 更多