仅接受数字输入

its*_*tsh 1 ruby

我想强制用户只从控制台输入数值.下面是我应该做的那段代码.

puts "Enter numeric value: "
result = gets.chomp

if result.to_i.is_a? Numeric
  puts "Valid input"
else
  puts "Invalid input."
end
Run Code Online (Sandbox Code Playgroud)

Valid input即使输入字符串值,它也会打印出来.原因是每个字符串在Ruby中都有一些等价的数值.有人可以帮助我正确修复条件,以便当用户输入非数字值时,脚本会提示Invalid input.吗?

che*_*iel 7

to_i 将任何字符串转换为整数,即使它不应该:

"asdf".to_i
Run Code Online (Sandbox Code Playgroud)

返回0.

你想要做的是:

puts "Enter numeric value: "
result = gets.chomp

begin
  result = Integer(result)
  puts "Valid input"
rescue ArgumentError, TypeError
  puts "Invalid input."    
  # handle error, maybe call `exit`? 
end
Run Code Online (Sandbox Code Playgroud)

Integer(some_nonnumeric_string)如果字符串不能转换为整数,则抛出异常,而String#to_i在这些情况下给出0,这就是为什么result.to_i.is_a? Numeric总是如此.