基本的Lua循环没有按照预期工作

基本上,我有一个计算器,在其中可以选择除法、乘法、加法和减法。我刚学会如何循环程序。但是循环不像应该的那样工作。

print("Please choose the way to use the calculator")
print("[1] Plus [2] Minus [3] Division [4] Multiply")

restart = 1

x = tonumber(io.read())

while restart == 1 do

if x == 1 then
    print("Please write the first number to add up")
    n1 = tonumber(io.read())
    print("Please write the second number to add up")
    n2 = tonumber(io.read())
    print(n1 .. "+" .. n2 .. "=" .. n1+n2)
elseif x == 2 then
    print("Please write the first number to subtract")
    n1 = tonumber(io.read())
    print("Please write the second number to subtract")
    n2 = tonumber(io.read())
    print(n1 .. "-" .. n2 .. "=" .. n1-n2)
elseif x == 3 then
    restart = 0
    print("Please write the first number to divide")
    n1 = tonumber(io.read())
    print("Please write the second number to divide")
    n2 = tonumber(io.read())
    print(n1 .. "/" .. n2 .. "=" .. n1/n2)
elseif x == 4 then
    print("Please write the first number to multiply")
    n1 = tonumber(io.read())
    print("Please write the second number to multiply")
    n2 = tonumber(io.read())
    print(n1 .. "*" .. n2 .. "=" .. n1*n2)
end
end

实际发生的情况是,如果你选择减去,然后输入10-2。它像它应该的那样工作。但问题在于,只有减号部分保持循环。它不会要求你选择一种方法来进行乘法计算。我该怎么解决这个问题?

例如,我希望它为您执行方程式,然后循环回起始位置。

点赞
用户300616
用户300616

你不需要将输入放在循环里面吗?

x = tonumber(io.read())

while restart == 1 do

应该改为

while restart == 1 do

x = tonumber(io.read())
2013-12-05 12:22:19
用户204011
用户204011

你只需要将这个:

print("Please choose the way to use the calculator")
print("[1] Plus [2] Minus [3] Division [4] Multiply")

restart = 1

x = tonumber(io.read())

while restart == 1 do

替换成这个:

restart = 1

while restart == 1 do

print("Please choose the way to use the calculator")
print("[1] Plus [2] Minus [3] Division [4] Multiply")

x = tonumber(io.read())

另外,由于你正在学习Lua,以下是你可以重构这段代码的一种方式(使用适当的局部变量等):

local get_operands = function(s)
  print("Please write the first number to " .. s)
  local n1 = io.read("*n")
  print("Please write the second number to " .. s)
  local n2 = io.read("*n")
  return n1, n2
end

while true do

  print("Please choose the way to use the calculator")
  print("[1] Plus [2] Minus [3] Division [4] Multiply")

  local x = io.read("*n")

  if x == 1 then
      local n1, n2 = get_operands("add up")
      print(n1 .. "+" .. n2 .. "=" .. n1+n2)
  elseif x == 2 then
      local n1, n2 = get_operands("subtract")
      print(n1 .. "-" .. n2 .. "=" .. n1-n2)
  elseif x == 3 then
      local n1, n2 = get_operands("divide")
      print(n1 .. "/" .. n2 .. "=" .. n1/n2)
      break
  elseif x == 4 then
      local n1, n2 = get_operands("multiply")
      print(n1 .. "*" .. n2 .. "=" .. n1*n2)
  end

end
2013-12-05 14:25:32
用户869951
用户869951
你在循环外设置了 x,所以它永远不会改变。将你的 x = input 放到循环内部,这样每次迭代都会重新读取它。
2013-12-05 16:14:22