转到while循环中的上一个代码块

时间:2014-11-12 17:23:49

标签: ruby

我有两个问题让用户输入相同的值。例如:

Q1 - enter value
Q2 - re-enter value

如果用户输入NIL值,则应再次提示“Q1”,这在我的代码中正常工作。但是用户输入NIL为“Q2”然后再次“Q1”需要提示,然后是“Q2”。但在我的代码“Q2”再次提示。有人可以帮助我解决这里的逻辑。

这是我的代码:

 def getPrompt(input)
         p1 = ""
         p2 = ""

         while 1
             puts "Entered getInput"

              while "#{p1}" == ""
                     p1 = ask("Enter #{input}: ") do |ch|
                          ch.echo = true
                     end

                     if "#{p1}" == ""
                          print "#{ch} cannot be empty string.\n".red
                      end

                end

                while "#{p2}" == ""
                      p2 = ask("Re-enter #{p1}: ") do |ch|
                           ch.readline = true
                       end

                       if "#{p2}" == ""
                           print "#{p1} cannot be empty string.\n".red
                       end
                 end

                 if "#{p1}".casecmp("#{p2}") == 0
                     break
                 else
                     print "#{val} mis-match\n".red
                 end

           end

                return "#{p1}"

         end

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是将第二个循环放在第一个循环中。

但你真的不需要所有这些循环。您的代码还存在其他问题,例如,您不需要通过p1"#{p1}"插入字符串,它已经是一个字符串。

然而,第一个解决方案可能是这样的:

def getPrompt(input)
  p1 = ""
  p2 = ""

  while p1 == "" or p1 != p2
    p1 = ask("Enter #{input}: ")

    if p1 == ""
      puts "#{input} cannot be empty string."
    else
      p2 = ask("Re-enter #{input}: ")

      if p2 == ""
        puts "#{input} cannot be empty string."
      elsif p1 != p2
        puts "mis-match"
      end
    end
  end

  return p1
end

希望这有帮助