gpt4 book ai didi

ruby - 无法在 ruby​​ 中使用 STDIN.gets.chomp() 获得正确的输入

转载 作者:数据小太阳 更新时间:2023-10-29 08:52:36 27 4
gpt4 key购买 nike

我正在学习 LearnRubyTheHardWay 教程,但在修改 exercise 29 时遇到困难.如果我像(在教程中那样)定义变量,一切正常:

people = 100000
cats = 34
dogs = 56

但是,如果我尝试从 STDIN 获取变量,例如:

puts "How many people are here?"
people = STDIN.gets.chomp()
puts "How many cats?"
cats = STDIN.gets.chomp()
puts "And how many dogs?"
dogs = STDIN.gets.chomp()

相等运算符返回错误结果,就好像它们只使用数字的前两位数计算结果一样。因此,如果我向人输入 100000000,向猫输入 11、12 或 13,方法将返回“猫太多……”如果我向人输入 150000000,而向猫输入小于 15 的任何内容,它们将返回“猫不多……”此外,我必须修改

dogs += 5

dogs += "5"

否则我会得到以下错误:in `+': can't convert Fixnum into String (TypeError)

如果我保留双引号并恢复为 people = 10000 的东西,我会收到以下错误:in `+': String can't be coerced into Fixnum (TypeError)

所以说,我对教程中的代码没有问题,只是尝试了解导致 STDIN 方法引入错误的原因。我查看了 RubyDoc.org ,看看它是否是 fixnum、integer 或 string 类的问题,或者与 chomp 或 gets 方法相关的任何问题,但找不到原因。我也在之前或之后尝试了 to_i 和 to_s 但没有得到任何结果。

文件的完整源代码如下:

puts "How many people are here?"
people = STDIN.gets
puts "How many cats?"
cats = STDIN.gets
puts "And how many dogs?"
dogs = STDIN.gets

#people = 100000
#cats = 34
#dogs = 56

puts "So, %d people, %d cats and %d dogs, huh?" % [people,cats,dogs]

if people < cats
puts "Too many cats! The world is doomed!"
end

if people > cats
puts "Not many cats! The world is saved!"
end

if people < dogs
puts "The world is drooled on!"
end

if people > dogs
puts "The world is dry!"
end

dogs += "5"
puts "Now there are #{dogs} dogs."

if people >= dogs
puts "People are greater than or equal to dogs."
end

if people <= dogs
puts "People are less than or equal to dogs."
end

if people == dogs
puts "People are dogs."
end

最佳答案

问题是 STDIN.gets返回一个字符串。因此,所有比较操作都将对字符串进行操作。示例:

people = "100000000"
cats = "11"

puts people < cats # => true!

这是因为<将按字典顺序比较字符串(并且 1000... 在字母表中位于 11 之前)。实际上,您的示例中有一点可以很明显地说明这里发生了什么:

dogs = STDIN.gets
dogs += "5"

如果你输入7在这里,它应该打印出 75 .你看,它只是连接字符串。

如何解决这个问题?简单,只需将字符串转换为整数:

puts "How many people are here?"
people = STDIN.gets.to_i
puts "How many cats?"
cats = STDIN.gets.to_i
puts "And how many dogs?"
dogs = STDIN.gets.to_i

关于ruby - 无法在 ruby​​ 中使用 STDIN.gets.chomp() 获得正确的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com