For loop 我的';对于';限制为';t是一个数字,即使我不是指那个变量

For loop 我的';对于';限制为';t是一个数字,即使我不是指那个变量,for-loop,lua,stdin,For Loop,Lua,Stdin,基本上,我正在为学校制作一个程序,用户输入两个体积的球,用一个公式你需要得到直径,然后看看直径是否太大。 但是我的一个变量应该是一个球的名称,所以我可以在我的输出中引用它(例如:你给我一个最大直径为2厘米的乒乓球。然后你给我通过程序运行的球的数量,3。然后你给3个卷,1.5,2.5和2——输出1.5-乒乓球,2.5-不是乒乓球,2-乒乓球)但每当我运行程序并给出球的名称时,我就会得到一个错误,即我的“for”限制不是一个数字,即使我不是指那个变量,而是指另一个变量 local n = io.re

基本上,我正在为学校制作一个程序,用户输入两个体积的球,用一个公式你需要得到直径,然后看看直径是否太大。 但是我的一个变量应该是一个球的名称,所以我可以在我的输出中引用它(例如:你给我一个最大直径为2厘米的乒乓球。然后你给我通过程序运行的球的数量,3。然后你给3个卷,1.5,2.5和2——输出1.5-乒乓球,2.5-不是乒乓球,2-乒乓球)但每当我运行程序并给出球的名称时,我就会得到一个错误,即我的“for”限制不是一个数字,即使我不是指那个变量,而是指另一个变量

local n = io.read("*n")  -- amount of balls 
for getal1 = 1, n do
  local naam_Bal = io.read() -- here I get an error if I enter a string
  local av = io.read("*n")  -- amount of volumes for the type of ball
  local gewenste_Diameter = io.read("*n")  -- maximum diameter
  local volume
  local diameter
  for getal2 = 1, av do
    volume = io.read("*n")   -- volume for each ball
    diameter = 2 * (((3/4)*(volume/math.pi)) ^ (1/3))  -- formula to calculate the diameter
    print(diameter)
  end 
end
这可能是一个愚蠢的错误,但我真的被卡住了。read('*n')的行为似乎很奇怪。它要求我按enter键两次(在5.1.5和5.4.2中),这一行为解释了为什么在输入字符串时会出现错误。先前读取的数字尚未完成

我建议不要使用它,而是使用像这样的函数来输入一个数字来回避这个问题

function input_number()
    var line = io.read()
    var num = tonumber(line)
    if not num then
        error("not a number")
    end
end

不过,您可能需要改进基本的错误处理。

这是因为
io.read(“*n”)
使EOL(在数字之后)未读

脚本中实际发生的情况:

  • local n=io.read(“*n”)
    读取数字,但不读取下线
  • local naam\u Bal=io.read()
    读取前一个号码的下线,但不读取名称
  • local av=io.read(“*n”)
    读取名称
解决方案:
如果每个数字都在单独的输入行中,

您应该始终使用
io.read(“*n”,“*l”)
,而不是
io.read(“*n”)

,因此
n
av
对于某些人来说不是一个数字reason@user253751什么意思?作为输入,我只为n输入了一个数字,但由于naam_Bal后出现错误,我无法为av输入。您使用的是什么Lua版本?我使用repl.it,所以我不知道。有没有办法更改您在那里使用的Lua版本?不管怎样,谢谢。这看起来很有效