我假设以下代码会将用户输入的所有不同行合并为一个字符串。结果是不同的。这背后的逻辑是什么?
我希望将不同的用户输入合并为一个。理想情况下,给定以下输入行:
一二三四
我最终会得到字符串"一二三四">
这是我认为会起作用的代码:
input = ""
while gets != nil
secondinput= gets
input << secondinput
end
运行上述代码后,输入最终等于"二四",而不是"一二三四">
这背后的逻辑是什么?
多谢!
gets
将读取并返回输入行
while
条件下使用gets
将读取一行,根据nil
进行检查并继续执行。
所以你只是忽略你输入的每一秒(第一、第三(行。
而是将输入保存到变量中,并使用该变量中保存的值进行逻辑
input = ""
line = gets
while line != nil
input << line
line = gets
end
正如@Cary Swoveland正确指出的那样,gets
永远不会返回nil
,你最终会得到无限循环。
gets
返回包含"新行"的给定值,您可以摆脱新行(gets.chomp
(并使您的代码更简单(可能更具可读性(
input = ""
line = gets.chomp
until line.empty?
input << line
line = gets.chomp
end
你在两个地方调用gets
。一次是检查while
的条件,一次是secondinput= gets
。因此,在while
的行上,你基本上是在阅读one
行和three
行,并丢弃值。
为了使您的代码正常工作,我可以做的最小更改是
input = ""
secondinput = gets
while secondinput != nil
input << secondinput
secondinput = gets
end
这样,每次循环迭代时只需调用gets
一次。