C++ do while Schleife mit Enter beginnen und mit Esc verlassen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Entweder du machst es so wie es schon @PeterKremsner vorgeschlagen hat, oder du nimmst gleich ein Befehl der Windows API, nämlich GetAsyncKeyState.

https://msdn.microsoft.com/de-de/library/windows/desktop/ms646293(v=vs.85).aspx

Beispiel:

if(GetAsyncKeyState(VK_ESCAPE)) {
//Irgendwas
}

den befehl hatte ich auch schon versucht aber bin zu blöde den sinnvoll zu nutzen oder er geht nicht so. Habe folgendes gemacht leider ohne Funktion Programm schließt sich nicht beim drücken von Esc



if(GetAsyncKeyState(VK_ESCAPE)) 
{return 0;} 
//oder { exit(-1);}



0

Die Antwort stellt mit Sicherheit die elegantere Variante dar ;)

Wenns mit der Windows API nicht klappt kannst du es auch mit Threads versuchen.

Bei einem Tastendruck den Workerthread starten und mit dem Escape Tastendruck, ein Flag setzen.

Mit dem Flag beendest du dann die Berechnung im Thread und in der Hauptanwendung und machst dann ein Thread.join.

Das wäre nur die alternative wenn du es auch so versuchen willst und wenn du gerade Programmieren lernst, sind so Threads insbesondere Workerthreads eine der wichtigsten Sachen, besonders wenns zu einem Programm mit GUI kommt.

1

Das abbrechen einer Berechnung mit ESC ist ziemlich kompliziert, das hängt vom Betriebsystem ab, dazu musst du den Tastendruck abfangen, also in Windows zB über die Win32 API.

Leichter ist es wenn du bei jedem Schleifendurchgang nach "Continue y/n" fragst.

Also die Berechnungen soll er ja noch zu ende machen (also keine dauernde überwachung ob esc gedrückt wurde oder nicht). Er soll ja lediglich am Ende der Schleife was normal ja mit z.b 

int Weiter;

// bla bla bla

cin >> Weiter;

} while(Weiter != 0);

So das ich mit 0 Raus komme und mit z.b 1 oder 2 usw die Schleife wieder hole. Nur soll stat der 0 Esc gedrückt werden koennen und stat 1 einfach nur Enter

0

Was möchtest Du wissen?