我在Haskell中编写了一个Brainfuck解释器,但只有在我按下Ctrl-D信号EOF时才对输入进行操作。如何在程序输入时使程序对每个字符起作用?
Here是来源。要使用该程序,请将文件解释为参数或在stdin的第一行中键入您的程序。
答案 0 :(得分:3)
听起来你的输入正在被缓冲。您可以使用System.IO.hSetBuffering
修改文件句柄的缓冲模式。例如,如果您正在读取标准输入,则可以使用以下命令禁用缓冲:
import System.IO
hSetBuffering stdin NoBuffering
答案 1 :(得分:1)
getLine
等待输入换行符(\n
),因为如果用户键入了一堆字符但从未按下输入怎么办?如果某条“线”已经被处理,如果那条“线”毕竟不是一条线,那将是一个错误。
您应该使用getContents
代替将返回在终端输入的所有内容。
此外,您使用以下行:
then hGetContents =<< openFile (head args) ReadMode
这将打开一个文件,永远不会关闭它。这对你的短期计划来说很好,但是对于将来习惯这样做可能是一个更好的想法:
then readFile $ head args