Haskell - 在运行时接受输入

3

我是Haskell的新手,不知道如何在代码执行期间从用户那里接收输入。假设我键入以下代码:

import System.IO

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

我希望在输入名字之前能够显示文本"你好,你叫什么名字?",然后在用户键入名字后输出第二行"你好,名字"。但是目前的情况是,在我输入我的名字之前,没有任何文本显示出来。这使得问题变得多余,因为���题直到用户回答后才会呈现给用户。

我知道这可能是一个新手问题,但我已经搜索了很长时间,没有找到答案。感谢您的时间。


你的代码在我这里完全正常。也许你使用方法不对。你是怎么调用它的? - Rainbacon
3
你确定你正在像上面的代码中使用 putStrLn 而不是 putStr 吗?这听起来像是一个缓冲问题。 - chi
1个回答

5

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

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

1
据我所知,当标准输出连接到终端时,所有明智的实现都应该默认使用行缓冲。如果这样做可以解决问题,我仍然会在其他地方寻找根本原因。 - user2847643
这解决了问题,谢谢。还有@user2847643,我会研究一下的。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接