尝试从用户那里接收一个值并增加它

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 会在每次迭代时自动更新,让循环在该变量获得最终值时结束。 此外,klocalfor 循环(即,它在它之前或之后都不存在),使代码更具可读性和更少的错误俯卧(参见: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()