如何检查用户输入是否是 Ruby 中的整数?



我正在尝试循环,直到用户输入一个整数。当用户输入字母时,以下代码应打印"想一个数字":

print "Think of a number "
while user_input = gets.to_i
if user_input.is_a? Integer
puts "your number is #{user_input}"
break
else
print "Think of a number "
end 
end 

当用户输入整数时,我的代码成功了。但是,当用户输入字符串时,to_i方法返回0,并且不执行 else 语句,因为它是一个数字。

代码的主要问题是String#to_i方法是杂食性的。

"0".to_i #⇒ 0
"0.1".to_i #⇒ 0
"foo".to_i #⇒ 0

也就是说,代码中的user_input始终是整数

您可能想要的是只接受数字(也许是负数的前导减号)。接受字符子集的唯一简洁方法是正则表达式。

# chomp to strip out trailing carriage return
user_input = gets.chomp 
if user_input =~ /A-?d+z/
...

上面的正则表达式除了带有可选前导减号的数字外没有任何意义。


或者,甚至更好(归功于@Stefan)

if gets =~ /A-?d+Z/

如果您只想接受正数,则可以使用范围:

user_input = gets.chomp 
if ('0'..'9').cover? user_input

让我们检查下面一个使用过的Integer(gets.chomp) rescue ''

print "Think of a number "
while user_input = Integer(gets.chomp) rescue ''
if user_input.is_a? Integer
puts "your number is #{user_input}"
break
else
print "Think of a number "
end
end

我遇到了类似的问题。我最终这样做了:

if user_input.strip == user_input.to_i.to_s
# More code here!
end

浮点数测试将是:

if user_input.strip == user_input.to_f.to_s
# More code here!
end

解决了我的问题。看看是否有帮助。

相关内容

  • 没有找到相关文章

最新更新