有没有办法让我的while循环在ruby中使用字符串?

有没有办法让我的while循环在ruby中使用字符串?,ruby,Ruby,我的问题是,我正在尝试编写一个相当简单的程序,它会询问用户是否愿意接受赞美。然后,用户可以输入“是”或“否”。我有一个while循环,检测用户是否说是,然后执行。然而,代码似乎只是跳过了它 我试过摆脱掉,倒壳,我试过,倒壳。它可以处理整数,但不能处理字符串。我将==更改为1,并将其设置为true,它执行得非常好。它只发生在字符串值上,即使我使用if语句 输入: compliment = Array.new compliment[0] = "You look absolutely stunning

我的问题是,我正在尝试编写一个相当简单的程序,它会询问用户是否愿意接受赞美。然后,用户可以输入“是”或“否”。我有一个while循环,检测用户是否说是,然后执行。然而,代码似乎只是跳过了它

我试过摆脱掉,倒壳,我试过,倒壳。它可以处理整数,但不能处理字符串。我将==更改为1,并将其设置为true,它执行得非常好。它只发生在字符串值上,即使我使用if语句

输入:

compliment = Array.new
compliment[0] = "You look absolutely stunning right now!"
compliment[1] = "It's always a blast to hang out with you!"


print "Do you want a compliment?"
wantcompliment = gets.to_s
size = compliment.size

while (wantcompliment.downcase == 'yes')
  x = rand(size)
  xplusone = x + 1
  puts compliment[x]
  puts ''
  puts "You got compliment " + xplusone.to_s + " out of " + size.to_s
  print "Would you like another compliment?"
  wantcompliment = gets.to_s
end
puts wantcompliment.downcase #Debug
输出:

C:\Ruby26-x64\bin\ruby.exe C:/Users/test/RubymineProjects/Project5/Compliment.rb
Do you want a compliment?Yes
yes

Process finished with exit code 0

get
返回的字符串附加了一个换行符:

irb(main):002:0> gets
yes
=> "yes\n"
您只需使用
gets.chomp
即可,这将删除尾随的
\n
字符:

irb(main):003:0> gets.chomp
yes
=> "yes"

get
返回的字符串附加了一个换行符:

irb(main):002:0> gets
yes
=> "yes\n"
您只需使用
gets.chomp
即可,这将删除尾随的
\n
字符:

irb(main):003:0> gets.chomp
yes
=> "yes"

请尝试
wantcompliment=get.to_.s.strip
,基本上您应该去掉换行符。@sam,这里
get
返回一个字符串,因此
.to_.s
的值值得怀疑
chomp
通常仅用于删除换行符
strip
用于删除由
gets
@CarySwoveland返回的字符串开头和结尾的空白。是的,您是对的,根据代码,与“yes”字符串相比,最好去掉实际字符周围的空白。try
WantCompletion=gets.to_.strip
,基本上你应该去掉换行符。@sam,这里
get
返回一个字符串,所以
.to\s
的值值得怀疑
chomp
通常仅用于删除换行符
strip
用于删除
gets
@CarySwoveland返回的字符串开头和结尾的空白。是的,您是对的,根据代码,与“yes”字符串相比,最好去掉实际字符周围的空白。