在我的代码中,elsif
不起作用。如果我输入"N"
或"n"
,它会向我询问密码,而不是puts
,它应该执行此操作:
puts "Would you like to access Your Software Wizard?"
puts "Type Y for Yes and N for No"
answer = gets.to_s
y = "yes"
n = "no"
Y = "yes"
N = "no"
if answer == y or Y
puts " Please Insert Password:"
password = gets.to_s
elsif answer == n or N
puts "Quitting..... an Alert Email and an Alert Sms has been sent to User of attempted access"
puts "Password has been changed and newly encripted"
puts "Good Bye"
end
我做错了什么?
答案 0 :(得分:4)
将if answer == y or Y
更改为if answer == y || answer == Y
或if [y, Y].include?(answer)
(同样适用于elsif条件)。
answer == y or Y
测试的answer
等于y
的值,或者是Y
的值为true。当您将其设置为有效字符串时,Y
的值将始终为true。
答案 1 :(得分:0)
您的代码中存在多个问题但是您遇到了一个最常见的问题,即对gets
的工作方式的误解:
answer=gets.to_s
不会返回您的想法。考虑这个IRB会话,我输入 1 返回:
>> gets
1
"1\n"
gets
返回一个以“\ n”结尾的字符串,当按下 Return 或 Enter 时输入该字符串。
使用to_s
没有帮助,因为gets
已经返回了一个字符串。与上面的示例一样,我输入了1
:
>> gets.class
1
String < Object
比较gets
的输出必须以某种方式允许尾随“\ n”:
>> gets.strip
1
"1"
>> gets.chomp
1
"1"
>> gets == "1\n"
1
true
>> gets.chomp == '1'
1
true
了解所有这些,冥想:
>> answer = gets.chomp.downcase
YES
"yes"
>> answer == 'yes'
true
您也有逻辑错误,因为您无法使用if answer == y or Y
或answer == n or N
,但https://stackoverflow.com/a/31971730/128421已涵盖此内容。