我假设以下代码会将用户输入的所有不同行合并为一个字符串。结果是不同的。发生这种情况的逻辑是什么?
我希望将不同的用户输入整合为一个。理想情况下,考虑到以下输入行:
一个 二 三 四
我最终会得到字符串“ one \ ntwo \ nthree \ nfour”
这是我认为可行的代码:
input = ""
while gets != nil
secondinput= gets
input << secondinput
end
运行上述代码后,输入最终等于“ two \ nfour”,而不是“ one \ ntwo \ nthree \ nfour”
这背后的逻辑是什么?
非常感谢!
答案 0 :(得分:0)
gets
将读取并返回输入行
gets
条件下使用的 while
将读取一行,针对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
答案 1 :(得分:0)
您要在两个地方拨打gets
。一次,当您检查while
的条件时,一次,当您进行secondinput= gets
时。因此,在与while
的行上,您基本上是在读取one
和three
的行,并将值扔掉。
我可以使您的代码正常工作的最小更改是
input = ""
secondinput = gets
while secondinput != nil
input << secondinput
secondinput = gets
end
这样,您每次循环迭代只调用一次gets
。