Conversion issues


#1

what is going on here, i dont understand why i keep getting conversion
errors. i am making a conversion from a string to and integer i dont
understand why it isnt working.

irb(main):036:0> def favorite_number
irb(main):037:1> puts “what is your favorite number?”
irb(main):038:1> s_num = gets.chomp
irb(main):039:1> i_num = s_num.to_i
irb(main):040:1> i_num = i_num+1
irb(main):041:1> puts “this is a better number” + i_num
irb(main):042:1> end
=> nil
irb(main):043:0> favorite_number
what is your favorite number?
5
TypeError: can’t convert Fixnum into String
from (irb):41:in +' from (irb):41:infavorite_number’
from (irb):43
from :0


#2

corey konrad wrote:

what is going on here, i dont understand why i keep getting conversion
errors. i am making a conversion from a string to and integer i dont
understand why it isnt working.

because it needs to be a string when you print it.

irb(main):036:0> def favorite_number
irb(main):037:1> puts “what is your favorite number?”
irb(main):038:1> s_num = gets.chomp
irb(main):039:1> i_num = s_num.to_i
irb(main):040:1> i_num = i_num+1
irb(main):041:1> puts “this is a better number” + i_num

puts “this is a better number” + i_num.to_s

irb(main):042:1> end
=> nil
irb(main):043:0> favorite_number
what is your favorite number?
5
TypeError: can’t convert Fixnum into String
from (irb):41:in +' from (irb):41:infavorite_number’
from (irb):43
from :0


#3

On 11-May-06, at 9:41 PM, corey konrad wrote:

irb(main):042:1> end
=> nil
irb(main):043:0> favorite_number
what is your favorite number?
5
TypeError: can’t convert Fixnum into String
from (irb):41:in +' from (irb):41:infavorite_number’
from (irb):43
from :0

Consider:

ratdog:~ mike$ irb
irb(main):001:0> puts “is this 5?” + 5
TypeError: can’t convert Fixnum into String
from (irb):1:in `+’
from (irb):1
from :0

you might consider puts “this is a better number” + i_num.to_s, or
using “this is a better number #{i_num}”

Hope this helps,

Mike

Mike S. removed_email_address@domain.invalid
http://www.stok.ca/~mike/

The “`Stok’ disclaimers” apply.


#4

Guest wrote:

corey konrad wrote:

what is going on here, i dont understand why i keep getting conversion
errors. i am making a conversion from a string to and integer i dont
understand why it isnt working.

because it needs to be a string when you print it.
(well, actually when you concatenate prior to printing)

irb(main):041:1> puts “this is a better number” + i_num

puts “this is a better number” + i_num.to_s


#5

because it needs to be a string when you print it.

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

Thanks


#6

Guest wrote:

Guest wrote:

corey konrad wrote:

what is going on here, i dont understand why i keep getting conversion
errors. i am making a conversion from a string to and integer i dont
understand why it isnt working.

because it needs to be a string when you print it.
(well, actually when you concatenate prior to printing)

irb(main):041:1> puts “this is a better number” + i_num

puts “this is a better number” + i_num.to_s

I dont know is there an easier way to do that? i mean i am a begining
programmer but i am really finding it difficult to join in the hype
about this language so far. Alot of times ruby is described as being
elegant i just havnt gotten that impression yet. It seems to just do
things in different ways than other languages for teh sake of being
different and thats all. If i am wrong then no big deal like i said i am
a beginging programmer but that is the impressio i am getting from it so
far.


#7

I wonder if this would work… I’m at work with no ruby :frowning:

def favorite_number
puts “what is your favorite number?”
puts “this is a better number #{gets.chomp.to_i + 1 }”
end


#8

On May 12, 2006, at 3:53 AM, corey konrad wrote:

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

You can use scanf:

require ‘scanf’
scanf("%d") # -> [10]
scanf("%f") # -> [10.0]

– Daniel


#9

Daniel H. wrote:

On May 12, 2006, at 3:53 AM, corey konrad wrote:

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

You can use scanf:

require ‘scanf’
scanf("%d") # -> [10]
scanf("%f") # -> [10.0]

– Daniel

hmm i cant find a description of scanf in the documentation for some
reason.


#10

how about this cin>> = num, lol i dont know ruby seems like a trade off
to me so far. i am just trying to understand all this hype about it. I
mean every book i am reading says its the best most awesome easiest to
use, just like using natural language, its elegant and beautiful and it
will make you cry because its so easy to use, etc etc. I am having a
hard time understanding that. If its true i would like to see it at some
point.

Mike S. wrote:

On 11-May-06, at 9:53 PM, corey konrad wrote:

because it needs to be a string when you print it.

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

You can use something like:

num = Integer(STDIN.gets) rescue nil

or

num = Float(STDIN.gets) rescue nil

which do conversions and deal with trailing garbage.

ratdog:~ mike$ irb
irb(main):001:0> Integer(" 0xE84C\n")
=> 59468

I use these in quick and dirty scripts quite often, whether it’s good
form I don’t know :slight_smile:

Mike

Mike S. removed_email_address@domain.invalid
http://www.stok.ca/~mike/

The “`Stok’ disclaimers” apply.


#11

On 11-May-06, at 9:53 PM, corey konrad wrote:

because it needs to be a string when you print it.

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

You can use something like:

num = Integer(STDIN.gets) rescue nil

or

num = Float(STDIN.gets) rescue nil

which do conversions and deal with trailing garbage.

ratdog:~ mike$ irb
irb(main):001:0> Integer(" 0xE84C\n")
=> 59468

I use these in quick and dirty scripts quite often, whether it’s good
form I don’t know :slight_smile:

Mike

Mike S. removed_email_address@domain.invalid
http://www.stok.ca/~mike/

The “`Stok’ disclaimers” apply.


#12

On May 12, 2006, at 4:27 AM, corey konrad wrote:

how about this cin>> = num, lol i dont know ruby seems like a trade
off
to me so far. i am just trying to understand all this hype about it. I
mean every book i am reading says its the best most awesome easiest to
use, just like using natural language, its elegant and beautiful
and it
will make you cry because its so easy to use, etc etc. I am having a
hard time understanding that. If its true i would like to see it at
some
point.

Yes, I am too currently looking for a language worthy of my “what is
your favorite number” program. I guess ruby is just 260,000 lines of
hype.

def favorite_number
print "what is your favorite number? "
puts “#{gets().to_i + 1} is better”
end

– Daniel


#13

corey konrad wrote:

because it needs to be a string when you print it.

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

There could be:

irb(main):001:0> def getn
irb(main):002:1> foo = gets
irb(main):003:1> foo.to_i
irb(main):004:1> end
=> nil
irb(main):005:0> bar = getn
123
=> 123
irb(main):006:0> bar
=> 123
irb(main):007:0> bar.class
=> Fixnum
irb(main):008:0>

or

irb(main):008:0> def getaray
irb(main):009:1> foo = gets
irb(main):010:1> foo.split(’ ')
irb(main):011:1> end
=> nil
irb(main):012:0> bar = getaray
foo bar baz
=> [“foo”, “bar”, “baz”]
irb(main):013:0> bar
=> [“foo”, “bar”, “baz”]
irb(main):014:0>

(neither of these is well written, but work for a proof of concept)

Thanks


#14

The goal of ruby is to make programming easier and more enjoyable right?
So isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way? I am a begining
programmer and i find ruby counter intuitive so far and that worries me
and makes me wonder if i am wasting my time with. I want to learn how to
write software. Thats the bigger picture i am in right now. Its not
personal, I am just trying to get my feet wet here and make sense of
all this stuff.

Yes, I am too currently looking for a language worthy of my “what is
your favorite number” program. I guess ruby is just 260,000 lines of
hype.

def favorite_number
print "what is your favorite number? "
puts “#{gets().to_i + 1} is better”
end

– Daniel


#15

yeah i like your way alot better than num = Integer(STDIN.gets) rescue
nil

Guest wrote:

corey konrad wrote:

because it needs to be a string when you print it.

oh ok that makes sense, isnt there a getn method for getting number or
other data types or do i always have to use gets?

There could be:

irb(main):001:0> def getn
irb(main):002:1> foo = gets
irb(main):003:1> foo.to_i
irb(main):004:1> end
=> nil


#16

i dont know there is always someone who takes something personal in
these chat forums, more so with perl than ruby i just dont understand
the romantic zealotry surrounding computer programming languages i
guess.

Yes, I am too currently looking for a language worthy of my “what is
your favorite number” program. I guess ruby is just 260,000 lines of
hype.

def favorite_number
print "what is your favorite number? "
puts “#{gets().to_i + 1} is better”
end

– Daniel


#17

On 11-May-06, at 10:57 PM, corey konrad wrote:

number or
other data types or do i always have to use gets?

There could be:

irb(main):001:0> def getn
irb(main):002:1> foo = gets
irb(main):003:1> foo.to_i
irb(main):004:1> end
=> nil

That depends on how you want to handle errors, with this
implementation of getn
garbage input gets turned into 0 (which you may or may not want to
happen.)

You don’t need the STDIN, or the rescue, so you can pick whichever
you deem appropriate for your situation:

num = gets.to_i # decimals only, bad input => 0
num = Integer(gets) # handles 0x, 0, 0b prefixes, bad input =>
ArgumentError
num = Integer(gets) rescue nil # as above but bad input => nil

And scanf is very useful for a raft of more complex cases (where you
might want a C style scanf :slight_smile:

What is appropriate depends on what you are trying to do.

Mike

Mike S. removed_email_address@domain.invalid
http://www.stok.ca/~mike/

The “`Stok’ disclaimers” apply.


#18

On 5/11/06, corey konrad removed_email_address@domain.invalid wrote:

The goal of ruby is to make programming easier and more enjoyable right?

Matz (Ruby’s creator) >
No language can be perfect for everyone. I tried to make Ruby perfect
for me, but maybe it’s not perfect for you. The perfect language for
Guido van Rossum is probably Python.
http://www.artima.com/intv/rubyP.html


#19

Hi Corey,

Ruby wasn’t necessarily written to make programming easier and more
enjoyable. It many ways it depends on who is using it. For those of us
coming from programming in languages like Java (look at the example
from Logan, ouch) it is quite refreshing. I’m not sure what your
history in programming is, but if you are new to programming or have
programmed in something much different than Ruby, I’m sure it can be
confusing at first.

Also keep in mind that programming can get very frustrating at times.
I’m sure just about every programmer reading this can remember a time
when they were pounding their keyboards and about to throw their
monitor out the window because of some stupid problem. But when that
problem is solved, or a complicated algorithm works perfectly, it is a
really great feeling. Plus it is nice to have such power of the
computer to make it do anything you want, instead of being a slave to
it and other people’s programs.

The truth is, Ruby may not be right for you. That is fine. There is no
good reason for you to program in something that doesn’t fit you
(well, unless you get paid a lot to do it :wink:

But seriously, if you feel that Ruby doesn’t work for you, check out
Python (http://www.python.org/) or maybe Perl (http://www.perl.org/)
or even Java (http://java.sun.com/). There are a lot of programming
languages out there, and it never hurts to give some of them a try.

But for most of us here, Ruby just fits.

Regards,
Ryan


#20

Hi Corey,

The goal of ruby is to make programming easier and more enjoyable right?
So isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way? I am a begining
programmer and i find ruby counter intuitive so far and that worries me
and makes me wonder if i am wasting my time with. I want to learn how to
write software. Thats the bigger picture i am in right now. Its not
personal, I am just trying to get my feet wet here and make sense of
all this stuff.

Might it be fair to say that it’s actually programming that you’re
having difficulty with rather than Ruby at this stage? Chris P.'s
tutorial (which I assume you’re using) isn’t trying to show you how
awesome Ruby is, it’s showing you how to program.

There are probably languages that are simpler for a beginner programmer
(probably QBasic if you can get your hands on it), but Chris P.'s
tutorial focusses on basic concepts a few at a time to get you up to
speed. That means leaving out a bunch of what makes Ruby cool. And once
you have mastered the material in Learning to Program, you will already
be far more productive in Ruby than you’d be after similar time on
Basic.

Nothing’s stopping you from learning more than one language so you can
choose between them and compare them more accurately. Indeed, hardly any
of us ruby-talkers use only Ruby, and I doubt there’s anyone who would
recommend it. But you might want to save your judgment at least until
you are a programmer.

Cheers,
Dave