[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Newbie needs a pointer

JervisTown(dwyer

3/30/2007 6:58:00 PM

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 @ http://www.newsleecher.c...
------------------- ----- ---- -- -

8 Answers

matthew.moss.coder

3/30/2007 7:07:00 PM

0

Offhand, I'd guess that the return value from gets also includes the
newline char(s).
Try:
name = gets.chomp

On 3/30/07, dwyer@o2.ie <JervisTown@ruby-lang.org> wrote:
> 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 @ http://www.newsleecher.c...
> ------------------- ----- ---- -- -
>
>
>

Gene Tani

3/30/2007 7:09:00 PM

0



On Mar 30, 12:00 pm, JervisT...@ruby-lang.org (d...@o2.ie) wrote:
> 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
>

irb(main):024:0> name=gets
wha
=> "wha\n"


Guest

3/30/2007 7:09:00 PM

0

*gets* return a string with a newline at the end, so *name!='q'* will
never be false because "q" != "q\n".

regards
Jan

Reid Thompson

3/30/2007 7:10:00 PM

0

dwyer@o2.ie wrote:
> 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 @ http://www.newsleecher.c...
> ------------------- ----- ---- -- -
>
>
>
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


Phillip Gawlowski

3/30/2007 7:12:00 PM

0

dwyer@o2.ie wrote:
> 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

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

Eek! That was supposed to be My Special Law, _MY_ special law, I tell
you!

T/


Kyle Schmitt

3/30/2007 7:16:00 PM

0

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?

Sebastian Hungerecker

3/30/2007 7:57:00 PM

0

dwyer@o2.ie 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
--
Ist so, weil ist so
Bleibt so, weil war so

JervisTown(dwyer

3/30/2007 11:21:00 PM

0

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 @ http://www.newsleecher.c...
------------------- ----- ---- -- -