新手问题 - 为什么这个循环不起作用



我假设以下代码会将用户输入的所有不同行合并为一个字符串。结果是不同的。这背后的逻辑是什么?

我希望将不同的用户输入合并为一个。理想情况下,给定以下输入行:

一二三四

我最终会得到字符串"一二三四">

这是我认为会起作用的代码:

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一次。

相关内容

  • 没有找到相关文章

最新更新