I realize this is an extremely noobish question, but i’m stuck and can’t
seem to figure it out (aside from some very simple HTML, i know nothing
about programming).
I’m trying to follow Chris P. guide here:
http://pine.fm/LearnToProgram/?Chapter=04
I’m trying this question he suggested:
• Write a program which asks for a person’s favorite number. Have your
program add one to the number, then suggest the result as a bigger and
better favorite number. (Do be tactful about it, though.)
This is what i have, but it’s not working:
puts ‘What is your favorite number?’
number = gets
puts ‘That is a good number, but ’ + (number.to_i + 1) + ’ is better!’
However, if i remove the (number.to_i + 1) from that line, it prints out
the text just fine. And if i remove the text, so the line is only:
puts number.to_i + 1
I get the correct results. But if i try to combine the two, i get:
TypeError: cannot convert Fixnum into String
method + in untitled document at line 3
at top level in untitled document at line 3
I’m using Textmate if that matters.
Nick,
number = gets
after this line, try to
p number
to see what does it contain. It contains
“4\n”
So, there is an ugly “\n” (carriage return) at the end. Let’s remove
that!
number = gets.chop
p number
now we have
“4”
That’s better.
However, this was not the problem, your program will run also without
this fix
The problem is that
(number.to_i + 1)
is a FixNum - you need to turn that into a String. So the correct
solution reads:
‘That is a good number, but ’ + (number.to_i + 1).to_s + ’ is better!’
HTH,
Peter
__
http://www.rubyrailways.com
(number.to_i + 1).to_s
You’re trying to merge a String and a Fixnum into one object (i.e.,
you feed one big string obect to puts; you can’t merge a Fixnum and
String like that). The to_s method will convert the Fixnum you
created with to_i and added one to back to a string for output.
Kind of confusing I know, but if you got this far, I’m sure youll get
it. 
–Jeremy
On 1/21/07, Nick N. [email protected] wrote:
better favorite number. (Do be tactful about it, though.)
puts number.to_i + 1
Posted via http://www.ruby-forum.com/.
–
My free Ruby e-book:
http://www.humblelittlerubybook.com/book/
My blogs:
http://www.rubyinpractice.com/
Another alternative:
puts “What’s your favourite number?”
number= gets.to_i
puts “Hmm… not bad, but #{number+1} is better”
Thank you very much! That does make sense now!
Nick N. wrote:
better favorite number. (Do be tactful about it, though.)
puts number.to_i + 1
I get the correct results. But if i try to combine the two, i get:
TypeError: cannot convert Fixnum into String
printf “That is good, but %d is better.\n”, number.to_i+1
print "What’s your favorite number? "
puts “Good one, but #{gets.to_i + 1} is better”
Nice (I didn’t realise you could do that either).
How about with error checking:
print "What’s your favorite number? "
puts “Good one, but #{Float(gets)+1} is better” rescue puts “That’s
not a number!”
Sharon P. wrote the following on 21.01.2007 08:16 :
Another alternative:
puts “What’s your favourite number?”
number= gets.to_i
puts “Hmm… not bad, but #{number+1} is better”
Just realised this one works:
print "What’s your favorite number? "
puts “Good one, but #{gets.to_i + 1} is better”
On Jan 21, 2007, at 12:48 AM, Peter S. wrote:
“4\n”
So, there is an ugly “\n” (carriage return) at the end. Let’s
remove that!
number = gets.chop
p number
When you want to remove a line ending, prefer chomp() to chop().
chomp() will only target the line ending, which will cause you less
trouble when using it on a line that doesn’t actually have one:
“James”.chomp
=> “James”
“James”.chop
=> “Jame”
Finally, neither is needed in this case:
“42\n”.chomp.to_i == “42\n”.to_i
=> true
James Edward G. II