尝试从用户那里接收一个值并增加它
Trying to receive a value from a user and increment it
我是编程新手,从一些基本技巧开始。所以我的问题是:我正在尝试 运行 一个询问用户姓名并将其打印在屏幕上的代码,运行 没问题。所以我正在尝试做一些特别的事情,现在在代码中添加一个部分,询问用户名称将在屏幕上打印多少次,但是当我这样做时,它开始无限循环并且在我关闭程序之前不会停止.
这是代码
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()
通常,要重复已知次计算,使用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
并在每次迭代时执行测试以评估何时结束。事实上,for
循环中的控制变量 k
会在每次迭代时自动更新,让循环在该变量获得最终值时结束。
此外,k
是 local 到 for
循环(即,它在它之前或之后都不存在),使代码更具可读性和更少的错误俯卧(参见:Lua 参考中的 Local Variables and Blocks。)
问题是您的 "quantidade" 变量被读取为字符串,而您的 "k" 变量是一个数字。数字和字符串并不相同,因此,例如 1
与 "1"
.
不同
要解决此问题,只需首先使用 tonumber()
函数将存储在 "quantidade" 变量中的读数转换为数字,方法是将 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()
我是编程新手,从一些基本技巧开始。所以我的问题是:我正在尝试 运行 一个询问用户姓名并将其打印在屏幕上的代码,运行 没问题。所以我正在尝试做一些特别的事情,现在在代码中添加一个部分,询问用户名称将在屏幕上打印多少次,但是当我这样做时,它开始无限循环并且在我关闭程序之前不会停止.
这是代码
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()
通常,要重复已知次计算,使用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
并在每次迭代时执行测试以评估何时结束。事实上,for
循环中的控制变量 k
会在每次迭代时自动更新,让循环在该变量获得最终值时结束。
此外,k
是 local 到 for
循环(即,它在它之前或之后都不存在),使代码更具可读性和更少的错误俯卧(参见:Lua 参考中的 Local Variables and Blocks。)
问题是您的 "quantidade" 变量被读取为字符串,而您的 "k" 变量是一个数字。数字和字符串并不相同,因此,例如 1
与 "1"
.
要解决此问题,只需首先使用 tonumber()
函数将存储在 "quantidade" 变量中的读数转换为数字,方法是将 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()