从Lua控制台读取数字后如何阅读单词



我试图为数学方程编写一些简单的代码,读取控制台输入。这是我的最小可执行文件示例:

print("Please enter a number")
local number = io.read("*n")
print("You entered the number: " .. number)
print("Please enter 'yes'")
local word = io.read("*l")
if word == "yes" then
  print("Thank you!")
else
  print(":(")
end

我输入1,按回车键,然后输入yes并按回车键,但我总是在 Lua 控制台中获得以下输出:

 Please enter a number
 >> 1
 You entered the number: 1
 Please enter 'yes'
 :(

我不明白为什么我什至不能输入yes.程序刚刚终止。我该如何解决这个问题?

正如 Egor 所指出的,io.read("*n") 将在该数字之后读取一个没有换行符的数字。

因此,如果您输入 1 并用 io.read("*n") 阅读,您实际上会在输入流中留下一个空行。

一旦你读了一个新行io.read("*l") Lua将从流中读出那个空行。因此,它不会等待您的输入,而是立即评估word的内容。

由于word是一个空字符串word == "yes"因此false

您可以通过使用 io.read("*n", "*l") 读取数字和以下 emtpy 行来解决此问题。这样,当您接下来调用io.read("*l"(时,输入流为空,Lua将等待您输入单词。

您可以运行以下代码:

print("Enter 1")
local number, newLine = io.read("*n", "*L")
print(number == 1)
print(newLine == "n")

看到您的号码后面确实跟着一个"n"

最新更新