Ruby代码意外输出"goodbye"且循环无法终止的原因及修复
问题原因与修复方案
原因
Ruby的gets方法会读取用户输入的全部内容,包括输入结束时按下的回车(换行符\n,Windows系统下是\r\n)。比如你输入"goodbye"并回车后,变量text实际存储的是"goodbye\n",和你判断的"goodbye"完全不相等,导致if条件永远无法触发,循环不会终止。
你提到输入"Hello"也会输出"goodbye",大概率是代码执行时的误解,或者实际运行的代码与你提供的不一致,但核心问题还是gets读取的内容包含换行符导致匹配失败。
修复方法
以下是几种可靠的修复方式:
方法1:用chomp移除末尾换行符
这是最常用的方式,chomp会精准移除字符串末尾的换行符,不影响其他内容:
while true text = gets.chomp if text == "goodbye" puts "goodbye" break end end
方法2:用strip移除首尾所有空白字符
如果允许用户输入前后带空格、制表符等空白字符,可以用strip:
while true text = gets.strip if text == "goodbye" puts "goodbye" break end end
方法3:判断时忽略换行符(不推荐)
这种方式可以匹配包含"goodbye"的输入,但不够严谨(比如输入"goodbye123"也会触发):
while true text = gets if text&.include?("goodbye") puts "goodbye" break end end
内容的提问来源于stack exchange,提问作者justsomeguytrynasleep
相关产品推荐
相关产品推荐

