Hi all, just started looking at Ruby in earnest today and my logic has
failed me already. Can
someone provide some subtle hints are to where the following code needs
attension. Its currently
stuck in a continuous loop, and ‘q’ doesnt exit the loop.
#a continous loop until ‘q’ is press
puts “Please enter your name?”
name=gets
while (name!=‘q’)
puts “welcome, #{name}Enter your name again:”
name=gets
end
–
Posted with NewsLeecher v3.9 Beta 1
Web @ NewsLeecher - The Complete Usenet Package
Offhand, I’d guess that the return value from gets also includes the
newline char(s).
Try:
name = gets.chomp
On Mar 30, 12:00 pm, [email protected] ([email protected]) wrote:
end
irb(main):024:0> name=gets
wha
=> “wha\n”
[email protected] wrote:
puts “Please enter your name?”
String name=gets
puts name.methods
while ( name.chomp != “q”)
puts “welcome, #{name}Enter your name again:”
name=gets
end
[email protected] wrote:
end
C:\WINDOWS\system32>irb
irb(main):001:0> name = gets
q
=> “q\n”
irb(main):002:0> name != ‘q’
=> true
irb(main):003:0> quit
C:\WINDOWS\system32>ruby -v
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
Try name = gets.chomp!
–
Phillip “CynicalRyan” Gawlowski
http://cynicalryan.110mb.com/
Eek! That was supposed to be My Special Law, MY special law, I tell
you!
T/
[email protected] wrote:
#a continous loop until ‘q’ is press
puts “Please enter your name?”
name=gets
while (name!=‘q’)
puts “welcome, #{name}Enter your name again:”
name=gets
end
After name=gets name contains the string that the user typed including
the
enter. So if the user enters ‘q’, the value of name is “q\n”. You can
remove
the \n with the chomp method (i.e. use name=gets.chomp instead of
name=gets).
HTH,
Sebastian
your string to quit has garbage (like a \n or somefin) at the end.
A little function like this may help
def same(somestring)
input=gets
if somestring==input
puts “Same”
else
puts “#{input}!=#{somestring}”
end
end
That will show what you’re already seeing. So add a .length…
def same(somestring)
input=gets
if somestring==input
puts “Same”
else
puts “#{input}!=#{somestring}”
puts “input.length=#{input.length}”
puts “somestring.length=#{somestring.length}”
end
end
Humm…
so what do we do? strip.
you could do
input=input.strip
But that’s not fun. Use a bang at the end of common functions to use
the dangerous destructive fun version
usually a ! changes the
object itself
so input.strip!
def same(somestring)
input=gets
input.strip!
if somestring==input
puts “Same”
else
puts “#{input}!=#{somestring}”
puts “input.length=#{input.length}”
puts “somestring.length=#{somestring.length}”
end
end
Does that help?
Thanks for all suggestions. IRB provides such a neat method to step
through the program, would not
have thought of it except for the suggestions.
When I decided to take a look at Ruby I was concerned that I would not
be able to receive suppport
(as python/php/asp.net still seem to reign supreme) , but this newsgroup
has allayed all my
doubts.
Thanks for the help.
btw => .chomp! works a .treat!
–
Posted with NewsLeecher v3.9 Beta 1
Web @ NewsLeecher - The Complete Usenet Package