io.read被跳过了 Lua。

4
我尝试做一个计算器作为第一个任务。但是我在io.read函数上遇到了问题。
这是我的代码:
io.write("let's try making a calculator in LUA!\n\n")

io.write("First number?\n> ")
firstNum = io.read("*n")

io.write("Second number?\n> ")
secNum = io.read("*n")

io.write("Operator?\n>")
op = io.read()

--rest of code goes here--

这段代码让我输入firstNumsecNum,但是一旦到了op这一步就直接退出了,没有任何错误提示。以下是输出结果:

➜ lua test.lua 
let's try making a calculator in LUA!!

First number?
> 10
Second number?
> 20
Operator?
>⏎

你知道我在这里做错了什么吗?


使用 firstNum = tonumber(io.read()) 读取一行带有数字的输入。 - Egor Skriptunoff
2
或者 firstnum = io.read("*n", "*l")。普通的 io.read("*n") 会在输入缓冲区中留下尾随的空格(包括换行符),因此 io.read() 会捕获第二个输入行的其余部分,而不是所需的第三行。 - siffiejoe
1个回答

3
原因是,数字会一直读取,直到按下 ENTER 键。换行符仍然在输入缓冲区中,并被后续的 io.read() 读取。
一种选择是读取 op 直到它有效。例如,跳过空格字符:
repeat op = io.read() until op:match "%S"

或者,只读取一个标点符号:
repeat op = io.read() until op:match "%p"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接