我是编程新手,并从一些基本提示开始。所以我的问题是:我试图运行一个代码,询问用户名字并在屏幕上打印,运行正常。所以我现在尝试做一些特别的事情,现在在代码中添加一个部分,询问用户在屏幕上打印名称的次数,但是当我这样做时,它开始无限循环并且不会停止直到我关闭了程序。
这是代码
function metodoDois()
print("Write a name: ")
name = io.read();
print("Write how many times that it will be printed on screen: ")
quantidade = io.read()
k = 0;
while name do
k = k+1;
io.write("\n", name, " ", k)
if k == quantidade then
name = not name;
end
end
end
metodoDois()
答案 0 :(得分:1)
通常,为了重复计算已知次,它被用作for
循环。因此,如果您没有特定的理由使用while
循环,则可以使用:
function metodoDois()
print("Write a name:")
local name = io.read()
print("Write how many times that it will be printed on screen:")
local quantidade = io.read()
for k = 1, quantidade do
io.write("\n", name, " ", k)
end
end
metodoDois()
这样,您可以避免显式创建控制变量k
并在每次迭代时执行测试,以便评估何时结束它。事实上,k
- 循环中的控制变量for
在每次迭代时自动更新,当循环在此变量获得其最终值时结束。
此外,k
是本地到for
- 循环(即,它之前或之后都不存在),使代码更具可读性,更不容易出错(参见Lua Reference中的Local Variables and Blocks。)
答案 1 :(得分:1)
问题是你的“quantdade”变量被读作字符串,而你的“k”变量是一个数字。数字和字符串不相同,例如,1
与"1"
不同。
要解决此问题,只需使用tonumber()
函数将存储在“quantdade”变量中的读数转换为数字,方法是将quantidade = io.read()
更改为quantidade = tonumber(io.read())
,如下所示:
function metodoDois()
print("Write a name: ")
name = io.read();
print("Write how many times that it will be printed on screen: ")
quantidade = tonumber(io.read())
k = 0;
while name do
k = k+1;
io.write("\n", name, " ", k)
if k == quantidade then
name = not name;
end
end
end
metodoDois()
此外,这只是一个挑剔,但该代码似乎有点未优化!我建议使用更像这样的东西:
function metodoDois()
print("Write a name: ")
local name = io.read();
print("Write how many times that it will be printed on screen: ")
local quantidade = tonumber(io.read())
for k = 1, quantidade do
io.write(name.." "..k.."\n")
end
end
metodoDois()