LUA:读取数字后读取文本无法工作

我在LUA中使用io.read命令时遇到了问题。下面的示例跳过了读取文本的行。只有在输入数字之后才会出现这种情况。

repeat
  print("输入数字!")
  number=io.read("*n")
  print("您是否想再次执行此操作?(y/n)")
  again=io.read()
until again=="n"

我在两个IDE(repl和ZeroBrane)中尝试过,但它让我疯狂!!!

有人能帮忙吗?

致敬,

Ulrich

点赞
用户5306039
用户5306039

尝试逐行阅读作为字符串,并使用 tonumber() 将字符串转换为数字。

repeat
        print("请输入数字!")
        num = tonumber(io.read())
        print('您是否希望再次执行?(y/n)')
        again = io.read()
until again == 'n'

调试时,我发现第二个 io.read 使用了刚刚输入数字后的缓冲区。

您的代码添加了一些打印:

repeat
    print("请输入数字!")
    -- num = tonumber(io.read())
    num = io.read('*n')
    print('你输入的是-> ' .. tostring(num))

    print('您是否希望再次执行?(y/n)')
    again = io.read()
    print('你的选择是(y/n)-> ' .. again)
until again == 'n'

输出:

请输入数字!
234
你输入的是-> 234
您是否希望再次执行?(y/n)
你的选择是(y/n)->
请输入数字!
234y
你输入的是-> 234
您是否希望再次执行?(y/n)
你的选择是(y/n)-> y
请输入数字!
234234n
你输入的是-> 234234
您是否希望再次执行?(y/n)
你的选择是(y/n)-> n

这个描述来自 Programming in Lua: 21.1

调用 io.read("*number") 从当前输入文件中读取一个数字。这是唯一的情况,其中 read 返回数字,而不是字符串。当您需要从文件中读取许多数字时,中间字符串的缺失可能会显著提高性能。*number 选项跳过任何数字之前的空格,同时接受数字格式,如 -3 、+5.2、1000 和 -3.4e-23。如果它在当前文件位置找不到数字(由于格式不良或文件结束),则返回 nil。

对于糟糕的描述,请谅解。

2018-06-01 15:00:43