What am i doing wrong?

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 Pine 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.

···

--
Posted via http://www.ruby-forum.com/.

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 :slight_smile: 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. :slight_smile:

--Jeremy

···

On 1/21/07, Nick Nolan <hardcoredummy@hotmail.com> wrote:

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 Pine guide here:
Mixing It Up - Learn to Program

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.

--
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"

···

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 Pine guide here:
Mixing It Up - Learn to Program

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.

--
Posted via http://www.ruby-forum.com/\.

Nick Nolan wrote:

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 Pine guide here:
Mixing It Up - Learn to Program

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

printf "That is good, but %d is better.\n", number.to_i+1

Thank you very much! That does make sense now!

···

--
Posted via http://www.ruby-forum.com/.

Sharon Phillips 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"

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

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 Gray II

···

On Jan 21, 2007, at 12:48 AM, Peter Szinek wrote:

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!"