Ruby-Schleife auf Tastendruck beenden

xActionx

Software-Overclocker(in)
Hey Leute,

Ruby will mal wieder nicht so wie ich will deshalb frage ich jetzt nachdem ich nichts passendes gefunden habe.

Und zwar möchte ich, dass eine Schleife unterbrochen wird wenn ich eine Taste (in diesem Fall C) drücke.

Bisher sieht mein Code wie folgt aus. Dieser beendet die Schleife jedoch nur wenn ich auf C und dann auf Enter drücke:

Code:
#-*-coding: utf-8 -*-

@exit = false
          Thread.new do
          @exit = true if STDIN.read(1) == 'c'
end

loop do
         puts "loop"
         sleep 1
         break if @exit
end
Das Problem liegt wohl daran, dass das Ubuntu Terminal auf $STDIN einen Zeilenpuffer liegen hat und ich hab keine Ahnung, wie ich den umgehe...

Vielen Dank im Vorraus

MFG

P.S. Mit "getc" funktioniert es ebenfalls nicht :\
 
Zuletzt bearbeitet:
Die richtige Funktion, die anzuwenden wäre, ist getch(). Habe im Internet etwas herumgestöbert und herausgefunden, dass seit Ruby 2.0 man mit require 'io/console' das Feature STDIN.getch benutzt werden kann. Hoffe das hilft dir weiter.

Gruß Muletto
 
Die richtige Funktion, die anzuwenden wäre, ist getch(). Habe im Internet etwas herumgestöbert und herausgefunden, dass seit Ruby 2.0 man mit require 'io/console' das Feature STDIN.getch benutzt werden kann. Hoffe das hilft dir weiter.

Gruß Muletto

Vielen Dank.

Das funktioniert zwar ansatzweise aber noch nicht so wie ich mir das vorstelle...

Wenn ich getch() implementiere haut er mir in der schleife nach jedem Durchlauf einen Tab vor das Wort mehr rein. KP warum.

So nach knapp 2 Tagen hab ich es nun hinbekommen.

Code:

Code:
#-*- coding: utf-8 -*-

require 'curses'
include Curses

Curses.timeout = 0

Signal.trap("INT") do 
        exit
end

while true 
       c = Curses.getch
       break if c == 'c'
       sleep 1
       puts "loop"
end

__END__
 
Zuletzt bearbeitet:
Zurück