For loop 我的';对于';限制为';t是一个数字,即使我不是指那个变量
基本上,我正在为学校制作一个程序,用户输入两个体积的球,用一个公式你需要得到直径,然后看看直径是否太大。 但是我的一个变量应该是一个球的名称,所以我可以在我的输出中引用它(例如:你给我一个最大直径为2厘米的乒乓球。然后你给我通过程序运行的球的数量,3。然后你给3个卷,1.5,2.5和2——输出1.5-乒乓球,2.5-不是乒乓球,2-乒乓球)但每当我运行程序并给出球的名称时,我就会得到一个错误,即我的“for”限制不是一个数字,即使我不是指那个变量,而是指另一个变量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
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版本?不管怎样,谢谢。这看起来很有效