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

时间:2017-06-20 10:01:06

标签: input 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。该程序刚刚终止。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如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"