我收到一条错误消息,指出我的 'for' 限制不是一个数字,即使我没有提到该变量
I get an error saying my 'for' limit isn't a number even though I am not referring to that variable
基本上我正在制作一个程序(用于学校),用户输入几个球的体积,用一个公式你需要得到直径然后看看直径是否太大。
但是我的一个变量应该是一个球的名称,所以我可以在我的输出中引用它(例如:你给我一个最大直径为 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
这可能是一个愚蠢的错误,但我真的卡住了
io.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")
读取数字但不读取 EOL。
local naam_Bal = io.read()
读取前一个号码的 EOL,但不读取名称。
local av = io.read("*n")
读名字。
解决方案:
如果您在单独的输入行中输入每个数字,
你应该总是使用 io.read("*n", "*l")
而不是 io.read("*n")
.
基本上我正在制作一个程序(用于学校),用户输入几个球的体积,用一个公式你需要得到直径然后看看直径是否太大。 但是我的一个变量应该是一个球的名称,所以我可以在我的输出中引用它(例如:你给我一个最大直径为 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
这可能是一个愚蠢的错误,但我真的卡住了
io.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")
读取数字但不读取 EOL。local naam_Bal = io.read()
读取前一个号码的 EOL,但不读取名称。local av = io.read("*n")
读名字。
解决方案:
如果您在单独的输入行中输入每个数字,
你应该总是使用 io.read("*n", "*l")
而不是 io.read("*n")
.