2017-08-22 2 views
0

J'essaie de faire en sorte que le numéro d'entrée de l'utilisateur soit envoyé à la fonction, mais je ne sais pas ce que je fais de mal. Quelqu'un peut-il m'aider?Comment appeler une entrée d'utilisateur dans une méthode en ruby ​​

puts "\n Amount with decimals:\n " 
STDOUT.flush 
numb = gets 

puts "\n Multiplier:\n " 
STDOUT.flush 
mult = gets 

stoque(0.01, numb, 0.5, mult, 1) 
+2

Pouvez-vous être plus précis sur ce qui se passe? Que se passe-t-il et que prévoyez-vous? Ce code reçoit en fait l'entrée de l'utilisateur et l'envoie à la méthode –

+0

Si vous avez besoin d'un numéro, peut-être 'mult.to_f'? – tadman

+0

Notez que 'STDOUT.flush' peut généralement être omis. Ruby se vide automatiquement lors de l'écriture sur un terminal (tty). – Stefan

Répondre

2

Si vous avez besoin de flotteurs, vous devez convertir les entrées pour les:

numb = gets.to_f 
... 
mult = gets.to_f 
... 
+0

Merci! Ça a marché – Tor

1

Si vous voulez Ruby soulever une exception pour l'entrée non valide (non-décimale), vous pouvez également utiliser :

numb = Float(gets) 

Quelques exemples:

gets | gets.to_f | Float(gets) 
--------+------------+-------------- 
'1'  | 1.0  | 1.0 
'.5' | 0.5  | 0.5 
'1.2.3' | 1.2  | ArgumentError 
''  | 0.0  | ArgumentError 
'foo' | 0.0  | ArgumentError 

En raison de l'exception, vous voudrez probablement l'envelopper dans un bloc begin-rescue, quelque chose comme:

puts 'Amount with decimals:' 
begin 
    numb = Float(gets) 
rescue ArgumentError 
    puts 'Invalid amount' 
    retry 
end 

noter que gets comprend le caractère de saut de ligne "\n" si l'entrée est entré avec Renvoie. Je l'ai omis parce que les lignes de fin sont ignorées par les deux, to_f et Float().