如何使用流控制请求用户输入整数而不是字符串
How to use flow control to request the user inputs an integer as opposed to a string
我的程序要求用户输入号码。我正在使用流量控制来确保用户只输入数字,如果用户输入数字以外的任何内容,程序会提示用户 "Please enter a number"。即使用户输入了一个数字,请求用户 "Please enter a number" 的流程控制语句也会运行。
我没有收到任何错误消息,但我的 if
/else
语句之一的语法一定不合适。我已经研究过应该将 "variable" 设置为什么以实现所需的输出,但我一定没有合适的布尔值。
puts "Enter a number."
variable = gets.chomp
variable = variable.to_i
if variable != Integer
puts "Please enter a number."
elsif variable == Integer
puts "Thank you. Your number is #{variable}."
end
即使我实际在终端输入一个数字,我也只得到 "Please enter a number." 我希望当我输入一个数字时,我会得到“Thank you. Your number is #{variable}.
”
比较 Integer 并得到 true 的唯一方法是将 Integer 与 Integer 进行比较:
Integer == Integer
# true
在那种情况下你需要的是使用 Object#is_a?
如果 class 是 obj 的 class,则 return 为真,或者如果class 是包含在 obj:
中的对象或模块的超class之一
module M; end
class A
include M
end
class B < A; end
class C < B; end
b = B.new
b.is_a? A #=> true
b.is_a? B #=> true
b.is_a? C #=> false
b.is_a? M #=> true
这允许您检查对象是否为整数 "based",但是请注意,您正在将 variable
重新定义为其 to_i
版本,这将 return始终为整数。
您可以使用 String#match
来检查用户输入的值是否与数字匹配(正整数或负整数):
unless variable.match?(/^-?\d*$/)
...
end
问题是 != and ==
个方法。
有关检查字符串是否可以转换为有效整数的更好方法,请参阅:
Test if a string is basically an integer in quotes using Ruby?
你最好使用 if else statement
。
如果加一个is_integer?如上面 link 所示的字符串 class 的方法(但你不必只是一种方法)你可以这样检查:
var_string = gets.chomp
if var_string.is_integer?
do_something
else
do_something_else
end
我的程序要求用户输入号码。我正在使用流量控制来确保用户只输入数字,如果用户输入数字以外的任何内容,程序会提示用户 "Please enter a number"。即使用户输入了一个数字,请求用户 "Please enter a number" 的流程控制语句也会运行。
我没有收到任何错误消息,但我的 if
/else
语句之一的语法一定不合适。我已经研究过应该将 "variable" 设置为什么以实现所需的输出,但我一定没有合适的布尔值。
puts "Enter a number."
variable = gets.chomp
variable = variable.to_i
if variable != Integer
puts "Please enter a number."
elsif variable == Integer
puts "Thank you. Your number is #{variable}."
end
即使我实际在终端输入一个数字,我也只得到 "Please enter a number." 我希望当我输入一个数字时,我会得到“Thank you. Your number is #{variable}.
”
比较 Integer 并得到 true 的唯一方法是将 Integer 与 Integer 进行比较:
Integer == Integer
# true
在那种情况下你需要的是使用 Object#is_a?
如果 class 是 obj 的 class,则 return 为真,或者如果class 是包含在 obj:
module M; end
class A
include M
end
class B < A; end
class C < B; end
b = B.new
b.is_a? A #=> true
b.is_a? B #=> true
b.is_a? C #=> false
b.is_a? M #=> true
这允许您检查对象是否为整数 "based",但是请注意,您正在将 variable
重新定义为其 to_i
版本,这将 return始终为整数。
您可以使用 String#match
来检查用户输入的值是否与数字匹配(正整数或负整数):
unless variable.match?(/^-?\d*$/)
...
end
问题是 != and ==
个方法。
有关检查字符串是否可以转换为有效整数的更好方法,请参阅: Test if a string is basically an integer in quotes using Ruby?
你最好使用 if else statement
。
如果加一个is_integer?如上面 link 所示的字符串 class 的方法(但你不必只是一种方法)你可以这样检查:
var_string = gets.chomp
if var_string.is_integer?
do_something
else
do_something_else
end