尝试从用户接收值并递增它

时间:2015-07-10 19:00:32

标签: lua do-while

我是编程新手,并从一些基本提示开始。所以我的问题是:我试图运行一个代码,询问用户名字并在屏幕上打印,运行正常。所以我现在尝试做一些特别的事情,现在在代码中添加一个部分,询问用户在屏幕上打印名称的次数,但是当我这样做时,它开始无限循环并且不会停止直到我关闭了程序。

这是代码

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()

2 个答案:

答案 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()