我在互联网上找不到或找不到的基本内容: 我用于测试的小代码很简单:
require("ex")
a = true
b = nil
while (a == true) do
b = io.read()
ex.sleep(5)
print(b)
end
非常简单。如果输入“ 1”(我正在使用记事本++和Windows命令提示符),它将等待5秒钟并打印,然后重复。但是我的问题是...如果我在睡眠的5秒钟内输入了更多的数字,当睡眠结束时,所有这些将自动按顺序执行。
有可能停止吗?我不希望在此期间读取任何输入。这些“鬼”输入存储在哪里?
答案 0 :(得分:0)
您可以通过以字节为单位的“缓冲区大小”参数来控制读取:
b = io.read(1)
在这种情况下,读取是在从输入中获取第一个字节后完成的。其余输入字节可用于下一个“读取”语句。 重要说明:如果输入“ 1”并按“ Enter”,则将有3个字节可供读取(包括“ \ r \ n”)。
有关详细信息,请参见https://www.lua.org/pil/21.1.html。
此外,您想知道一种在下次读取之前清理输入缓冲区的方法。这很容易:使用io.read(“ * line”)语句如下:
b = io.read("*line") -- suppose, input is: "1234"
b = string.sub(b, 0, 1)
print(b) -- prints 1
b = io.read("*line") -- suppose, input is: "567"
b = string.sub(b, 0, 1)
print(b) -- prints 5
b = io.read("*line") -- suppose, input is: ""
b = string.sub(b, 0, 1)
print(b) -- prints empty string
io.read(“ * line”)从输入中获取整行,但是您只能从其中获取第一个字符。