作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望我的命令行 Haskell 程序能够像这样运行:
程序等待用户输入,
最佳答案
这里有很多困惑。让我们试着把事情弄清楚。
I tried getContents. But getContents wait for user to type all lines before processing them.
f line = putStrLn ("Hi, " ++ line ++ "!")
main = do
hSetBuffering stdout LineBuffering -- or use NoBuffering
putStrLn "Enter some names."
input <- getContents
mapM_ f (lines input)
NoBuffering
如果您不打算在每行用户输入之后打印整行(包括换行符)。
Q: But in my first try, I use: "interact show" and it doesn't work. Do you know why?
A: Because show will not return any output until its entire input has been exhausted.
show
生成一个没有换行符的字符串! (虽然字符序列
['\\','\n']
有时会在输入超过一行时出现。)所以,对于
interact show
, 你真的必须使用
NoBuffering
在
stdout
.例如,如果你使用这个:
main = do
hSetBuffering stdout NoBuffering
interact show
stdin
的缓冲到
NoBuffering
(而不是默认的
LineBuffering
),因为
show
足够高效,以至于在每次击键后它确实可以产生更多的输出。
关于haskell - 如何在 Haskell 中无限读取和处理用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195215/
我是一名优秀的程序员,十分优秀!