2015-10-05 72 views
-1

我用戶遵守格式(dd.mm.yyyy)。我想重複地詢問用戶的生日,直到他以正確的格式輸入他的生日。在用戶以正確的格式輸入他的生日之前,我會如何爲用戶輸入循環提出問題?我可以爲用戶輸入設置哪些條件?循環直到用戶以正確的格式輸入他的生日

這是我寫的小程序。

puts "What is your birthday? (dd.mm.yyyy)" 
user_input = gets.chomp 

user_array = user_input.split(".") 
uyyyy = user_array[2] 
umm = user_array[1] 
udd = user_array[0] 

y = Time.now.year 
m = Time.now.month 
d = Time.now.day 

require 'Date' 
a = Date.new(y.to_i, m.to_i, d.to_i) - Date.new(uyyyy.to_i, umm.to_i, udd.to_i,) 
sec = (a * 24 * 60 * 60).to_i 

if a < 0 
    puts "You are born in the future!" 
    puts "You will be born in #{a} days" 
else 
    puts "Your year is #{uyyyy}! Your month is #{umm}! Your day is #{udd}!" 
    puts "Todays year is #{y}! Todays month is #{m}! Todays day is #{d}!" 
    puts "You are #{a.to_int/365} years, #{m} month and #{d} days old"  
    puts "You are #{sec} seconds old!" 
end 
+0

你可以使用一個簡單的正則表達式。 '/ \ d {2} \。\ d {2} \。\ d {4} /'應該這樣做,我想。 –

+0

@SergioTulentsev你忘了'\ A'和'\ z'。 – sawa

+0

@sawa:true,true。 –

回答

0
while true 
    puts "What is your birthday? (dd.mm.yyyy)" 
    user_input = gets.chomp 
    break if user_input =~ /\A\d{2}\.\d{2}\.\d{4}\z/ 
end 
udd, umm, uyyyy = user_input.split(".") 
+0

好的,謝謝,我會看看「正則表達式」,嘗試理解並更好地學習它。如果您對閱讀或學習內容有任何其他建議,請讓我知道。 –

0

給你:

require 'date' 
while true do 
    print "Enter bithday:" 
    date_string = gets.chomp 
    begin 
     date = Date.strptime(date_string, "%d.%m.%Y") 
     print "Your bithday: #{date}" 
     break 
    rescue 
     puts "You enter incorrect date" 
    end 
end 
+1

使用'loop do'而不是'while true true' –

+0

@SergioTulentsev這更簡單,但更慢。 – sawa

+0

哦,我忘了,你是對的 –

相關問題