我试着写一些简单的数学方程式代码,读取控制台输入。这是我的最小可执行示例:
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
。该程序刚刚终止。
我该如何解决这个问题?
答案 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"