2016-11-18 10 views
1

Ich möchte aus einer while-Schleife ausbrechen, wenn der Benutzer irgendeine Taste während eines Sleep (Millisekunden) gedrückt hat, wie in Stop, wenn irgendeine Taste während dieser Millisekunden gedrückt wird. Wie mache ich das? Die Schleife sieht wie folgt aus:Pause, wenn irgendeine Taste gedrückt wird C++

while (1) 
{ 
    r = rand() % 5501 + 1000; 
    Sleep(r); 
    cout << "NOW!\n"; 
    t = clock()/1000; 
    system("pause"); 
    if (clock()/1000 < t + 1) 
    { 
     cnt++; 
     cout << "Aaaaand...\n"; 
    } 
    else break; 
} 

Plattform: Windows

+0

Auf welcher Plattform befinden Sie sich? – Henningsson

+0

Es hängt von den Fähigkeiten Ihres Terminals und Betriebssystems ab. Dafür gibt es keine C++ - Sprachfunktion. –

+0

So etwas wie http://stackoverflow.com/questions/1449324/how-to-simulate-press-any-key-to-continue – RvdK

Antwort

2

Sie können kbhit() verwenden. Versuchen Sie dies:

bool exit = false; 
while(!exit){ 
    if(kbhit()) 
     exit = true; 
} 

Dies funktioniert, wenn Sie mit Windows arbeiten. Wenn Sie mit Linux arbeiten, können Sie auch paste kbhit.h y kbhit.cpp von http://linux-sxs.org/programming/kbhit.html kopieren und zu Ihrem Projekt hinzufügen.

+0

Vielen Dank! Das hat es gelöst! –

2

Es gibt keine Sprache C++ Lösung, dies zu tun.

Sie müssen eine plattformspezifische Funktion finden, die wartet, bis eine Eingabe mit einem Timeout verfügbar ist. Rufen Sie diese Funktion anstelle von Sleep (die auch keine C++ - Funktion ist) auf. Bei der Rückkehr von dieser Funktion überprüfen Sie den Rückkehrcode, um zu sehen, ob er zurückgegeben wurde, weil eine Eingabe verfügbar ist (der Benutzer hat eine Taste gedrückt) oder eine Zeitüberschreitung aufgetreten ist (der Benutzer hat keine Taste gedrückt).

Verwandte Themen