getch() durch Standard C++ selbst implementieren?
-
CStoll schrieb:
afair kehrt getch() sofort mit einem Fehlerwert zurück, wenn gerade keine taste gedrück ist - cin.get() hält das Programm an, bis es eine Eingabe bekommt
afaik halten beide das Programm an, meinst du kbhit()?
-
The getch, wgetch, mvgetch and mvwgetch, routines read a character from the window. In no-delay mode, if no input is waiting, the value ERR is returned. In delay mode, the program waits until the system passes text through to the program. Depending on the setting of cbreak, this is after one character (cbreak mode), or after the first newline (nocbreak mode). In half-delay mode, the program waits until a character is typed or the specified timeout has been reached.
-
langeweile schrieb:
afaik halten beide das Programm an, meinst du kbhit()?
Nur ein Auszug aus der Manual-Seite, die ich im letzten Beitrag verlinkt habe:
The getch, wgetch, mvgetch and mvwgetch, routines read a character from
the window. In no-delay mode, if no input is waiting, the value ERR is
returned. In delay mode, the program waits until the system passes
text through to the program. Depending on the setting of cbreak, this
is after one character (cbreak mode), or after the first newline
(nocbreak mode). In half-delay mode, the program waits until a charac‐
ter is typed or the specified timeout has been reached.(es hängt also von den Konsolen-Einstellungen ab, ob und wie lange getch() auf eine Eingabe wartet)
-
Wieder was gelernt...

-
Danke, aber ihr habt es selbst erkannt. Ich bezog mich auf das Default-getch(), bei dem man nicht erst mit ENTER bestätigen muss, um die Eingabe zu registrieren. Also kann mir noch jemand weiterhelfen, oder klappt es so nicht?
-
CStoll schrieb:
Ob das wirklich äquivalent zu man: getch ist? (afair kehrt getch() sofort mit einem Fehlerwert zurück, wenn gerade keine taste gedrück ist - cin.get() hält das Programm an, bis es eine Eingabe bekommt)
Wenn unqualifiziert von getch() die Rede ist würde ich von der Borland-Funktion ausgehen (die genau einen Tastendruck abwartet). Leute die curses kennen sagen das wohl normalerweise auch dazu.
-
Bashar schrieb:
Leute die curses kennen sagen das wohl normalerweise auch dazu.
Das dachte ich mir eigentlich auch. Aber um mit seiner offensichtlich falsch gelegenen Antwort doch noch Recht zu bekommen, muss man natürlich zwangsläufig auf eine alternative Antwortmöglichkeit ausweichen.
-
FragendeFrage schrieb:
Bashar schrieb:
Leute die curses kennen sagen das wohl normalerweise auch dazu.
Das dachte ich mir eigentlich auch. Aber um mit seiner offensichtlich falsch gelegenen Antwort doch noch Recht zu bekommen, muss man natürlich zwangsläufig auf eine alternative Antwortmöglichkeit ausweichen.
Hm. die Antwort war doch wohl nicht falsch, sondern einfach nur umfassend. Kann ja keiner ahnen dass man sich hier auf irgendwelche speziellen defaults bezieht (die nicht überall defaults sein müssen). Aber um nicht dumm dazustehn weil man nur einen Teilaspekt der Funktion kannte muss man natürlich zwangsläufig die Antworten derjenigen die Bescheid wussten als falsch darstellen.
-
Darauf hätte ich 100€ verwetten können, dass ausgerechnet du wieder deine Klappe aufmachst. Sonst gehst du eh auf nichts anderes ein, als auf Diskussionen!
-
FragendeFrage schrieb:
Darauf hätte ich 100€ verwetten können, dass ausgerechnet du wieder deine Klappe aufmachst. Sonst gehst du eh auf nichts anderes ein, als auf Diskussionen!
default!=immer, dass solltest du verstehen...
AUßerdem startest du hier grad ne "schlechte" Diskussion...
-
AUßerdem startest du hier grad ne "schlechte" Diskussion...
Und du trägst kräftig dazu bei.

-
Ich weiß, aber ich habe auch nicht geschimpft...
Wird auch sicher gelöscht...
-
Ich weiß, aber ich habe auch nicht geschimpft...
Wer hat es sonst gemacht?
Also als Ironie-Detektor bist du schonmal eindeutig durchgefallen. 
Wird auch sicher gelöscht...
Wenn du den ganzen Thread meinst... nein.
Oder wenn du die Posts meinst... nein.
-
langeweile schrieb:
Wird auch sicher gelöscht...
*Mod on*
Von meiner Seite aus nicht - aber wenn ihr nicht bald wieder sachlich werdet, kommt der hier zum Einsatz *demonstrativ mit Schlüsselbund klappert*
-
FragendeFrage schrieb:
Darauf hätte ich 100€ verwetten können, dass ausgerechnet du wieder deine Klappe aufmachst. Sonst gehst du eh auf nichts anderes ein, als auf Diskussionen!
Naja wenigstens flame ich nicht als Unreg rum. Hast zwar recht, dass ich gern meinen Senf zu Diskussionen gebe, aber die Nicht-Diskussionen wo ich Beiträge geliefert hab scheinst du nicht gelesen oder verdrängt zu haben.
Aber back to topic *auf CStolls Schlüssel schiel*:
hier wurde das Thema schon einmal angesprochen (aber soweit ich das erkenne nicht wirklich mit Standard C++ gelöst):
http://www.c-plusplus.net/forum/viewtopic-var-t-is-182914-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.htmlUm das "default"-Verhalten von getch zu simulieren müsste man zuerst einmal hinbekommen, dass Tastatureingaben nicht direkt an den Bildschirm weitergeleitet werden, was meines Wissens mit Standard C++ nicht machbar ist. Des weiteren müsste man irgendwie dafür sorgen, dass der nächste Tastendruck direkt in den streambuf von cin geschrieben wird - was meines Wissens aber erst der Fall ist, wenn Enter gedrückt wurde (sonst würden Sequenzen mitsamt Vertippern und Backspaces zur Korrektur im streambuf landen, oder?). Mit den Standard C++-Mitteln (also vor allem Streams) kommt man in der Richtugn also kaum weiter, aber vielleicht gibts ja irgendwo ne Bibliothek mit der man die Konsole direkt ansprechen kann, wenn man cin und cout davon abgekoppelt hat?
-
CStoll schrieb:
Von meiner Seite aus nicht - aber wenn ihr nicht bald wieder sachlich werdet, kommt der hier zum Einsatz *demonstrativ mit Schlüsselbund klappert*
Meine Kommentare waren ja auch nicht wirklich ernst gemeint, ich hätte sie eventuell mit lachenden Smilies bereichern sollen...
pumuckl schrieb:
Naja wenigstens flame ich nicht als Unreg rum.
Ja, weil du registriert bist. Keiner würde seinen Account gerne beflecken. Als Unreg hat man wenigstens noch die Freiheit, seine Meinung uneingeschränkt (solange es sich im akzeptablen Bereich bewegt) kundzutun. Und dass ich trotzdem noch so ernst genommen werde, konnte ich vorher nicht wissen.
pumuckl schrieb:
Hast zwar recht, dass ich gern meinen Senf zu Diskussionen gebe, aber die Nicht-Diskussionen wo ich Beiträge geliefert hab scheinst du nicht gelesen oder verdrängt zu haben.
Die habe ich nicht gelesen. Aber hast du meine Beiträge gelesen, die ich zu "Nicht-Diskussionen" beigetragen habe? Und ich kann dir versichern, dass ich schon genügend konstruktive Kommentare in diesem Forum abgegeben habe. Auch wenn nur als Unreg.
pumuckl schrieb:
hier wurde das Thema schon einmal angesprochen (aber soweit ich das erkenne nicht wirklich mit Standard C++ gelöst):
Danke, aber genau diesen Thread hatte ich vor wenigen Tagen gelesen. Das hab mir eben u.A. die Anregung dazu, diesen Thread zu eröffnen.
[quote="pumuckl"]Mit den Standard C++-Mitteln (also vor allem Streams) kommt man in der Richtugn also kaum weiter, aber vielleicht gibts ja irgendwo ne Bibliothek mit der man die Konsole direkt ansprechen kann, wenn man cin und cout davon abgekoppelt hat?[quote]
Genau nach sowas würde ich suchen. Du bist jetzt übrigens der erste, der mir eine (zutreffende) Antwort zu meiner Frage liefert. Kein Wunder, dass ich dann manchmal etwas abhebe, wenn mir eine Seite lang ständig irgendetwas anderes erklärt wird.Trotzdem ein Dankeschön. Wenn es wirklich keine Standardlösung gäbe, wäre meine Frage auch schon beantwortet. Vielleicht fällt ja jemandem noch etwas ein dazu.

-
Noch ein Anlauf...
pumuckl schrieb:
Mit den Standard C++-Mitteln (also vor allem Streams) kommt man in der Richtugn also kaum weiter, aber vielleicht gibts ja irgendwo ne Bibliothek mit der man die Konsole direkt ansprechen kann, wenn man cin und cout davon abgekoppelt hat?
Genau nach sowas würde ich suchen. Du bist jetzt übrigens der erste, der mir eine (zutreffende) Antwort zu meiner Frage liefert. Kein Wunder, dass ich dann manchmal etwas abhebe, wenn mir eine Seite lang ständig irgendetwas anderes erklärt wird.
Trotzdem ein Dankeschön. Wenn es wirklich keine Standardlösung gäbe, wäre meine Frage auch schon beantwortet. Vielleicht fällt ja jemandem noch etwas ein dazu.
-
FragendeFrage schrieb:
Keiner würde seinen Account gerne beflecken. Als Unreg hat man wenigstens noch die Freiheit, seine Meinung uneingeschränkt (solange es sich im akzeptablen Bereich bewegt) kundzutun.
Die Freiheit hat eigentlich jeder
Wenn andere das als Accountbefleckung sehen wenn ich meine Meinung kundtue dann ist das nicht mein Problem. Ich geben dem Account damit nur ein Gesicht und hebe ihn aus der Meinungslosen Masse der Nichtsmeinenden
Einige moegen mich fuer meine Meinungen, andere wiederum nicht, aber that's life. Ich bin nunmal nicht everybody's darling 
Ich hab mich mal durch die Dokumentationen zu streambuf::in_avail() & Co. gewaelzt, bin aber nicht so ganz schlau draus geworden bzw. hab nichts gefunden was mir die Erleuchtung zum Problem gegeben haette. Aber wenn wie oben vermutet der streambuf eh erst nach <Enter> gefuellt wird, muss doch wieder was Systemnahes her, was C++ ja nicht wirklich ist (gottseidank).
=> in meinen Augen ist getch() mit Standard C++ Mitteln nicht ersetzbar.
-
FragendeFrage schrieb:
Noch ein Anlauf...
pumuckl schrieb:
Mit den Standard C++-Mitteln (also vor allem Streams) kommt man in der Richtugn also kaum weiter, aber vielleicht gibts ja irgendwo ne Bibliothek mit der man die Konsole direkt ansprechen kann, wenn man cin und cout davon abgekoppelt hat?
Genau nach sowas würde ich suchen. Du bist jetzt übrigens der erste, der mir eine (zutreffende) Antwort zu meiner Frage liefert. Kein Wunder, dass ich dann manchmal etwas abhebe, wenn mir eine Seite lang ständig irgendetwas anderes erklärt wird.
Wen du deine Inspirationsthreads aufmerksam verfolgt hättest, sowie die Suche benutzt hättest, hättest du die Antwort schon mehrfach gefunden:
[quote='Krux']oder du könntest eine der tollen libraries nehmen wie GLFW, das ist zwar eigentlich hauptsächlich dafür zuständig den OpenGL kontext auf möglichst allen Platformen zur verfügung zu stellen, aber es bietet auch eine tolle Tastenabfrage an (wenn man sich das Paket als Sourcecode läd, dann ist genau dafür auch ein sehr schönes Beispiel dabei).[/quote]
-
FragendeFrage schrieb:
...
pumuckl schrieb:
Naja wenigstens flame ich nicht als Unreg rum.
Ja, weil du registriert bist. Keiner würde seinen Account gerne beflecken. Als Unreg hat man wenigstens noch die Freiheit, seine Meinung uneingeschränkt (solange es sich im akzeptablen Bereich bewegt) kundzutun. ...

Ist wie im "real life": Da habe ich auch noch nicht erlebt, dass Anonymität die Menschen verantwortungsbewusster macht ... sondern eher, dass sie dann mal "die Sau rauslassen" (die offensichtlich in ihnen steckt).
Auch unter dem Deckmäntelchen der "Meinungsfreiheit" wird Rumflamen keine Tugend.Gruß,
Simon2.