2016-07-30 16 views
0

ich nicht das Problem mit diesem Code herausfinden konnte:While-Schleife funktioniert nicht. Einschließlich Saiten und Umwandlung in Großbuchstaben

select = false 
while (!select) 
    print "What animal do you want to adopt? (Cat/Dog/Fish): " 
    your_animal = gets 
    if your_animal.upcase == "CAT" or your_animal.upcase == "DOG" or your_animal.upcase == "FISH" 
    puts "Ah, you want #{your_animal}." 
    select = true 
    else 
    puts "Please pick from any of the three animals and make sure it is spelled correctly." 
    end 
end 

Die if Aussage mit den drei Bedingungen nicht funktioniert, und wird den Code in der else Anweisung ausführen sogar wenn ich schreibe die richtige Antwort für die if Anweisung zu aktivieren.

Jede Hilfe wäre willkommen.

Antwort

3

ändern

your_animal = gets 

zu

your_animal = gets.chomp 

Der Grund hierfür ist, dass die Eingabe gets gesamte String zurückgibt, einschließlich des abschließenden Wagenrücklauf.

Nebenbei bemerkt: statt

your_animal.upcase == "CAT" or 
    your_animal.upcase == "DOG" or 
    your_animal.upcase == "FISH" 

man verwenden könnte:

%w(CAT DOG FISH).include? your_animal.upcase 
+0

... und 'bis (wählen)' statt 'while (! Wählen)'. Wenn Sie das Ergebnis von 'gets' in eine Ganzzahl (nicht hier) konvertieren wollen, können Sie entweder' gets.chomp.to_i' oder nur 'gets.to_i' schreiben, da' .to_i' die Konvertierung so bald beendet wenn es ein anderes Zeichen als eine Ziffer (oder das Ende der Zeichenfolge) trifft. Gleiches mit 'to_f'. –

+0

Das hat perfekt funktioniert! Ich habe es gelesen, nachdem Sie das erwähnt haben und ich verstehe warum; Wenn Sie eine Eingabe eingeben, lautet die Zeichenfolge beispielsweise: "CAT " Das ist nicht dasselbe wie "CAT". Danke, das macht Sinn! –

+0

Alex, nein, "bekommt" gibt "CAT \ n" 'zurück. –