ruby - 如何循环请求用户输入,直到用户输入正确的信息?

标签 ruby loops if-statement user-input

我是一名正在尝试学习 Ruby 的初学者。到目前为止,我已经学到了一些比较简单的东西,但我似乎一直在尝试将我学到的一些东西结合起来。

我想做的是问用户一个问题并告诉他们输入 1 或 2。一个简单的 if 语句可以让我在他们输入 1 时用一个选项响应,在他们输入 2 时用另一个选项响应。但是,如果他们输入完全不同的内容,例如不同的数字、字符串等,我该如何提示他们重试并让它循环回到原始问题?

到目前为止,我所拥有的看起来像这样。

prompt = "> " 
puts "Question asking for 1 or 2." 
print prompt
user_input = gets.chomp.to_i

if user_input == 1    
   puts "One response." 
elsif user_input == 2   
   puts "Second response." 
else    
   puts "Please enter a 1 or a 2." 
end

这就是我卡住的地方。我如何让它回到“要求 1 或 2 的问题”。直到用户输入 1 或 2?我知道这可能是某种循环,但我似乎无法弄清楚要使用哪种循环以及如何将重复请求用户输入(如有必要)纳入其中,直到获得所需的输入。任何帮助将不胜感激。谢谢。

最佳答案

你说得对,你需要循环运行你的代码。使用以 gets.chomp 作为条件的 while 循环,您可以继续询问用户输入,直到您决定获得所需内容。

在这种情况下,您想验证问题的答案并再次询问它是否无效。您不需要做太多更改,除非确保在答案正确时跳出循环。如果答案错误,则再次打印提示。

这是一个稍微重构的版本,它使用 case 代替,但它显示了您需要做什么。毫无疑问,这是一种更简洁的方法...

prompt = "> "
puts "Question asking for 1 or 2."
print prompt

while user_input = gets.chomp # loop while getting user input
  case user_input
  when "1"
    puts "First response"
    break # make sure to break so you don't ask again
  when "2"
    puts "Second response"
    break # and again
  else
    puts "Please select either 1 or 2"
    print prompt # print the prompt, so the user knows to re-enter input
  end
end

关于ruby - 如何循环请求用户输入,直到用户输入正确的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387173/

相关文章:

ruby-on-rails - 是否有任何 gem/插件可用于使用 ruby​​ on Rails 创建您自己的 url 缩短服务

ruby-on-rails - rails : How to downcase non-English string?

java - 将固定数量的 for 循环转换为参数化数量时出现问题

javascript - 为什么这个JS循环重写整个页面

c++ - 很少执行且几乎为空的 if 语句大大降低了 C++ 中的性能

sql条件语句

c - 基本的按位(我认为)或示例?

ruby-on-rails - Heroku "We' 抱歉,出了点问题”

ruby-on-rails - 如何在使用acts_as_tenant gem保存 "tenant"类之前构建关联记录?

java - 让应用程序等待几秒钟 Java