我遵循LearnRubyTheHardWay教程,难以修改exercise 29。一切工作正常,如果我这样定义的变量(如教程):无法在ruby中使用STDIN.gets.chomp()获取正确的输入
people = 100000
cats = 34
dogs = 56
但是,如果我尝试从标准输入得到的变量,比如:
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()
等式运算返回false结果如果他们只使用数字的前两位数字计算结果。所以如果我给人们输入100000000,给猫输入11,12或13,方法会返回“太多猫”。如果我输入150000000给猫和其他人< 15,他们会返回“猫不多”。必须修改
dogs += 5
到
dogs += "5"
否则我得到以下错误:在'+':不能转换为长整数字符串(类型错误)
如果我离开了双引号到位并恢复到人= 10000的东西,我得到以下错误:在`+'中:字符串可以' t被强制转换为Fixnum(TypeError)
所以说,我对教程中的代码没有任何问题,只是尝试了解导致由STDIN方法引入错误的原因。我查看了RubyDoc.org,看看它是否与fixnum,整数或字符串类或与chomp相关的任何问题,或者获取方法但找不到原因。我之前或之后也尝试过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
谢谢,我尝试了people.to_i,但现在我发现我忘了像“people = people.to_i”这样做。我还没有看到任何像STDIN.geti而不是获取。有没有什么地方可以建议学习rubydoc.org以外的方法? – barerd 2012-02-11 14:52:49
@barerd:不存在'STDIN.geti'这样的东西。您使用'gets.to_i',因此在STDIN文件流对象上调用['gets'](http://apidock.com/ruby/IO/gets)方法,然后调用['to_i'](http: //apidock.com/ruby/String/to_i)在生成的'String'对象上被调用。如果您想了解可用方法的概述,可以使用[apidock](http://apidock.com/ruby),这是rubydoc的一个结构。但是,最好先对语言有一个基本的了解(教程对此很有帮助)。 – 2012-02-11 15:57:04
Apidock将成为教程的一个很好的赞美。也谢谢你。 – barerd 2012-02-11 16:22:29