Newbe - strange behavior of print

C

caof2005

Hello folks, this is the scenario:
I tried to run the following code in EasyEclipse for Ruby IDE and
SciTE on WinXP
Both has the same behavior.

def main
print "Enter the number of employees: "
numEmp = gets
puts "The number of employees is:= " + numEmp.to_s
end

main

====================

The output is nothing ( it appears that the program hangs-on for a
while ), then if go to the console and I push the ENTER key it appears
the "Enter the number of employees: " and suddenly the program
terminates.

What I'm doing wrong?, I tried to follow the instructions from several
books ( David Black's "Ruby for Rails" and Dave Thomas "Programming
Ruby" ) and both indicates that the kind of code that I wrote should
work.

Any help would be very appreciated.
Regards
 
P

Phillip Gawlowski

caof2005 said:
Hello folks, this is the scenario:
I tried to run the following code in EasyEclipse for Ruby IDE and
SciTE on WinXP
Both has the same behavior.

def main
print "Enter the number of employees: "
numEmp = gets
puts "The number of employees is:= " + numEmp.to_s
end

main

====================

The output is nothing ( it appears that the program hangs-on for a
while ), then if go to the console and I push the ENTER key it appears
the "Enter the number of employees: " and suddenly the program
terminates.

What I'm doing wrong?, I tried to follow the instructions from several
books ( David Black's "Ruby for Rails" and Dave Thomas "Programming
Ruby" ) and both indicates that the kind of code that I wrote should
work.

Have you, per chance, tried to invoke your script from the command line?
I know that SciTE needs to be patched in one way or another to allow for
input. I can't judge Eclipse in that regard, as I don't use it.

--
Phillip "CynicalRyan" Gawlowski
http://cynicalryan.110mb.com/

Rule of Open-Source Programming #9:

Give me refactoring or give me death!
 
B

Björn Paetzel

caof2005 schrieb:

Flush your buffers:
def main
print "Enter the number of employees: " $stdout.flush # <- here
numEmp = gets
puts "The number of employees is:= " + numEmp.to_s
end

That should help. :)
 
C

caof2005

caof2005 schrieb:

Flush your buffers:


$stdout.flush # <- here


That should help. :)

Bjorn:

Thanks it worked great!
However is it possible you can explain me in general terms why this
behavior happens?
I mean, besides trying in EasyEclipse and SciTE I tried the same code
in irb, and surprisingly it works perfectly (no need to flush)!

Regards
 
C

caof2005

Have you, per chance, tried to invoke your script from the command line?
I know that SciTE needs to be patched in one way or another to allow for
input. I can't judge Eclipse in that regard, as I don't use it.

--
Phillip "CynicalRyan" Gawlowskihttp://cynicalryan.110mb.com/

Rule of Open-Source Programming #9:

Give me refactoring or give me death!

Phillip:

Yes I tried from within irb... and it works perfectly, however when I
use either SciTE or EasyEclipse the behavior is awkward.

Regards
Carlos
 
B

Björn Paetzel

caof2005 said:
Thanks it worked great!
However is it possible you can explain me in general terms why this
behavior happens?

The output is being buffered to save system calls which might be costly.
It is actually committed to the operating system when the buffer fills
up, when a newline is sent (print '\n', or puts) or when explicitly told
so (flush).
I mean, besides trying in EasyEclipse and SciTE I tried the same code
in irb, and surprisingly it works perfectly (no need to flush)!

Because irb's prompt contains a newline. :)
 
M

Marcin Raczkowski

Bjorn:

Thanks it worked great!
However is it possible you can explain me in general terms why this
behavior happens?
I mean, besides trying in EasyEclipse and SciTE I tried the same code
in irb, and surprisingly it works perfectly (no need to flush)!

Regards

Irb have Readline support and also automatically flushes everything - just =
in=20
case :] by deafault print don't flush - if you want flushing - use puts
 
D

Drew Olson

Phillip:
Yes I tried from within irb... and it works perfectly, however when I
use either SciTE or EasyEclipse the behavior is awkward.

Regards
Carlos

Carlos -

I can't speak to SciTE, but Eclipse (specifically with RDT) has an issue
with the syncing of input/output.

See the first question at
http://rubyeclipse.sourceforge.net/faq.rdt.html for information about
resolving the issue. Or just run from the command line.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,166
Latest member
DollyBff32
Top