2017-01-25 24 views
0

Gibt es eine Funktion, die ein Eingabeaufforderungs-Programm wie system("pause") warten lässt und nur nach dem Akzeptieren eines bestimmten Schlüssels weiterläuft?C++ - Programm anhalten, bis eine bestimmte Taste gedrückt wird

+2

Sie vielleicht einen Blick auf [ncurses] nehmen wollen (https://www.gnu.org/ software/ncurses /) – George

+0

Meinen Sie, als würden Sie Code für Zeile durchgehen? – ArmenB

+1

Nicht in der C++ - Standardbibliothek. –

Antwort

2

Wenn Sie auf einen Newline-Charakter warten, gibt es eine einfache und portable Möglichkeit, dies zu tun. Verwenden Sie einfach getline.

Wenn Sie andere Zeichen empfangen möchten, ohne zuerst einen Zeilenumbruch zu erhalten, sind die Dinge weniger portabel. In Unix-Systemen müssen Sie Ihr Terminal auf "Rohmodus" einstellen. Wie George's Kommentar erwähnt, ist Ncurses eine einfache Möglichkeit, dies zu tun, und es bietet praktische Funktionen zum Zeichnen von Dingen an einem bestimmten Ort im Terminal, Empfangen beliebiger Tasten, etc.

Unter Windows müssen Sie seine verwenden console interface. Dies ist natürlich außerhalb von Windows nicht verwendbar.

Wie Neil Butterworth kommentiert, gibt es auch eine Version von Curses, die für Windows funktioniert, genannt PDCurses. Wenn Sie Software schreiben müssen, die sowohl für Unix als auch für Windows funktioniert, ist das eine gute Option.

+1

Flüche ist auch unter Windows verfügbar - http://pdcurses.sourceforge.net/ –

0

auf Windows-Konsole Schnittstelle die getche() Funktion wartet auf einen Tastendruck vor der weiteren Ausführung.

+0

Es scheint, dass Sie meine Frage missverstehen. Was ich wissen wollte, ist, wenn es eine Funktion ähnlich getch() gibt, aber nur für einen bestimmten Schlüssel funktioniert. – Twilight053

0

Wenn Sie unter Windows arbeiten, können Sie kbhit() verwenden, das Teil der Microsoft-Laufzeitbibliothek ist. Wenn Sie auf Linux sind, können Sie kbhit so

#include <stdio.h> 
#include <termios.h> 
#include <unistd.h> 
#include <fcntl.h> 

int kbhit(void) 
{ 
    struct termios oldt, newt; 
    int ch; 
    int oldf; 

    tcgetattr(STDIN_FILENO, &oldt); 
    newt = oldt; 
    newt.c_lflag &= ~(ICANON | ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0); 
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); 

    ch = getchar(); 

    tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
    fcntl(STDIN_FILENO, F_SETFL, oldf); 

    if(ch != EOF) 
    { 
    ungetc(ch, stdin); 
    return 1; 
    } 

    return 0; 
} 

Kompilieren Schritte implementieren:

gcc -o kbhit kbhit.c 

Sobald er ausgeführt wird mit

./kbhit 

Es fordert Sie auf einen Tastendruck, und wird beendet, wenn Sie Drücken Sie eine Taste (nicht beschränkt auf Eingabe oder druckbare Tasten).

(Got über das Internet - Sie können Code ändern und bestimmte ch Wert wie \ n verwenden für Enter-Taste)

Verwandte Themen