代码之家  ›  专栏  ›  技术社区  ›  IVlad

记事本中的Haskell控制台IO++

  •  4
  • IVlad  · 技术社区  · 15 年前

    我最近开始学哈斯克尔。我有这个密码

    module Main
        where
    
    import IO
    
    main =  do 
                hSetBuffering stdin LineBuffering
                putStrLn "Please enter your name: "
                name <- getLine
                putStrLn ("Hello, " ++ name ++ ", how are you?")
    

    我正在使用ghc编译器和notepad++编辑器。问题是这种互动是这样的:

    流程已启动>>
    弗拉德
    请输入您的姓名:
    你好,弗拉德,你好吗?
    <<<流程已完成。

    如您所见,只有在我输入了一些内容之后,才会写入输出。这有点出乎意料,因为我确信程序会先问我的名字,然后我进入它,然后它会打招呼。好吧,如果我手动运行EXE,但如果我用记事本++运行它并使用它的控制台包装器,情况就不会是这样了……

    如何让notepad++在应该的时候显示输出,而不是在程序终止之前显示所有输出?这可能吗?

    2 回复  |  直到 15 年前
        1
  •  7
  •   yatima2975    15 年前

    尝试设置 标准输出 到线路缓冲!另外,在ghci中加载程序而不是在编译后的版本中运行似乎根本不需要任何缓冲…

    顺便说一下,我不知道核电站的控制台-谢谢你指点我!

        2
  •  2
  •   sfultong    15 年前

    我不熟悉记事本++,但是一个快速而简单的方法可能是

    hFlush stdout
    

    每次比赛后。您甚至可以使用以下方法:

    nppPutStrLn s = putStrLn s >> hFlush stdout