C++ cin keypress-Ereignis
Ich glaube, dies ist eine sehr einfache Frage, aber ich kann nicht finden, eine einfache Antwort darauf. Ich habe eine unendliche Schleife, z.B. while(1)
, for(;;)
, und ich brauche eine Pause von der Schleife auf einen Tastendruck. Was ist der einfachste Weg, dies zu tun?
P. S.: ich kann nicht mit getch
, cin.ignore
oder cin.get
weil es Stoppt die Schleife.
Auf welche Plattform???
Wenn Sie uns sagen, mehr von dem Zusammenhang, ich bin mir ziemlich sicher, wir könnten etwas einfallen lassen. Ansonsten benötigen Sie für die Nutzung einiger OS-spezifische Dinge.
Einige linux auf dem server. Ich weiß nicht, welche Distribution. Gibt es nicht ein cross-Plattform-Lösung in der std?
Nein, gibt es nicht.
Wenn Sie uns sagen, mehr von dem Zusammenhang, ich bin mir ziemlich sicher, wir könnten etwas einfallen lassen. Ansonsten benötigen Sie für die Nutzung einiger OS-spezifische Dinge.
Einige linux auf dem server. Ich weiß nicht, welche Distribution. Gibt es nicht ein cross-Plattform-Lösung in der std?
Nein, gibt es nicht.
InformationsquelleAutor Lukas Salich | 2012-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, was Sie wollen, ist die asynchrone Eingaben. Alle Methoden zur
cin
warten Sie, bis Sie die EINGABETASTE. Verwenden Sie system-spezifischen Funktionen für,, oder verwenden Sie eine Bibliothek, wird es für Sie tun.Was Sie tun müssen, ist, um nicht nur Ihre Logik in eine while-Schleife, sondern auch hören von message-pipe von Ihrem OS. Wenn Sie möchten, etwas mehr Informationen bitte schreiben Sie einen Kommentar.
EDIT: Es gibt noch eine andere Möglichkeit, aber ich würde es nicht empfehlen, wie es sein kann (nicht tragbar, glaube ich. Der folgende code kompiliert und läuft unter VS2012RC.
Naja, die message-Verarbeitung unter linux ist Recht einfach, glaube ich. Sie müssen nur einen oder zwei OS-Aufrufe zum abrufen einer Nachricht und dann auf ausführen, Standard-Aktion, wenn Sie nicht wollen, etwas zu tun. Der wesentliche Unterschied ist, dass mit streams erhalten Sie
char
von Zeichen eingegeben werden, während der Verwendung von OS-Anrufe, die Sie bekommen, Key Up/Down-Ereignissen können Sie mithilfe der Zusatztasten als "normale" (shift, Strg, etc.)Die "Pascal" - Frage, schauen Sie auf der
conio.h
/getch()
Funktion. Kann es mir anders benannt, basierend auf den compiler, den Sie verwenden, aber eigentlich ist es in der Regel zur Verfügung gestellt. (Es kann seingetch
,getchar
oder was auch immer)Ich kann nicht einmal mit der conio.h compiler.
Ist es nicht an der alten header? Ich benutze fast neueste G++ - compiler btw.
InformationsquelleAutor Bartek Banachewicz
Gibt es keine "Tastatur" in C++. Sie haben nur eine undurchsichtige input-Datenstrom, die Ihr terminal füllt gelegentlich mit seiner eigenen Tastatur-Eingabe. Dies ist fast immer eine gepufferte, editierbare Zeile-Weise Eingabe, so haben Sie keine Möglichkeit zu wissen, wenn jeder gegebenen Taste gedrückt wurde.
Benötigen Sie einen Plattform-spezifische Methode, um die Kommunikation direkt mit Ihrem terminal auf einem niedrigeren Niveau. Eine solche Bibliothek, ziemlich weit verbreitet und tragbar, ist
ncurses
(eine kompatible Windows-Variante existiert). Portable grafische frameworks wie SDL und Allegro bieten auch raw-handling der Tastatur.NÖ, streams nicht erlauben. Blick auf meinen Kommentar unter meine Antwort.
Sieh es mal so: Wenn Ihr C++ - Anwendung erhalten würde jedem keypress-Ereignis, wäre es verantwortlich für Sie. Ihr C++ - Programm würde haben, um die Linie zu Bearbeiten, zum Beispiel, die wiederum würde erfordern intime Kenntnisse der terminal-API, so können Sie z.B. löschen eines Zeichens drücken Sie die Rücktaste. Zu sicher der Durchschnittliche C++ - app/runtime, diese Belastung, diese ist nicht Teil des Standards. Es gibt jedoch viele Bibliotheken, die dies tun, wie conio, ncurses, etc.; dies bedeutet, dass Sie können wählen, was auch immer-Bibliothek best zu Ihren Bedürfnissen passt. Einer der großen Fetten Pluspunkte der C/C++.
InformationsquelleAutor Kerrek SB
Unten ist eine Windows-Konsole code, der verwendet
kbhit()
und hat eine unendliche Schleife.Aber wenn die Tastatur trifft, bricht Sie die Schleife ab und beendet sich.
Wenn Sie
<conio.h>
, versuchen Sie dies :innerhalb der while-Schleife , fügen if(kbhit()) break;
Ich habe bereits versucht und es funktioniert nicht.
Compiler kann nicht finden conio.h oder nur conio.
InformationsquelleAutor Software_Designer
Diese überprüft, ob "Pfeil Links" gedrückt wird oder nicht:
Auch diese nicht warten, für alles. Prüft nur einige Fahnen.
Einige andere Tasten definiert in winuser.h:
winuser.h muss eingebunden werden in windows.h
Sorry, ich habe nicht die Kommentare Lesen, während ich Gebäude die Antwort ^^
InformationsquelleAutor huseyin tugrul buyukisik