QWR*_*WRp 38 io haskell buffering ghc
我有以下代码:
main = do
putStr "Test input : "
content <- getLine
putStrLn content
Run Code Online (Sandbox Code Playgroud)
当我运行它(带runhaskell
)或编译它(ghc 6.10.4)时,结果是这样的:
asd
Test input : asd
Run Code Online (Sandbox Code Playgroud)
为什么要Test input : asd
在之后打印asd
?
在的代码示例http://learnyouahaskell.com/,它使用putStr
,所述getLine
的呈现输出比我的不同.当我使用putStrLn
该程序按预期工作(打印,然后提示,并打印).
它是一个错误ghc
,还是它应该工作的方式?
Jos*_*Lee 52
这是因为ghci禁用缓冲,而使用ghc编译的程序默认具有行缓冲.你可以通过运行这个看到这个:
import System.IO
main = print =<< hGetBuffering stdout
Run Code Online (Sandbox Code Playgroud)
在ghci你看到NoBuffering
与runghc,你得到LineBuffering
.由于换行符直到用户输入后才会打印,因此提示也不会.
通过hFlush stdout
在提示后添加来修复它(或禁用缓冲hSetBuffering stdout NoBuffering
,但这可能很糟糕).
归档时间: |
|
查看次数: |
3015 次 |
最近记录: |