Frage von HelpMeD3, 41

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

Ich wollte ein Programm mit einer do while Schleife einige Rechenoperation durch führen lassen und am ende dann mit Enter das ganze wieder holen zu lassen oder mit Esc das Programm zu schließen. Leider kann ich das nur solange ich zahlen oder Buchstaben verwende. Habe schon im unteren beispiel mit verschiedenen dinge herum experimentiert die es bei googel so gibt aber leider ohne erfolg

#include <iostream>

using namespace std;

int main()

{

    /*Hier soll mit Enter rein kommen*/
     do {  /*Hier die verschieden Rechen aufgaben*/ }
     while(/*Hier soll mit Esc verklassen werden koennen*/);

return 0;

}
Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TheBassHead, 34

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
}
Kommentar von HelpMeD3 ,

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);}



Kommentar von TheBassHead ,

Musst die Windows API auch includen

#include <Windows.h>
Kommentar von PeterKremsner ,

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.

Antwort
von PeterKremsner, 39

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.

Kommentar von HelpMeD3 ,

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

Kommentar von PeterKremsner ,

dann mach das nicht mit cin sondern getchar() und speicher den Wert als Char.

Da bekommst du dann den ASCII Code der gerdückten Taste zurück.

getchar blockiert aber solange bis es eine Eingabe erhalten hat.

Für ein non-blocking getch siehe hier:

http://stackoverflow.com/questions/11472043/non-blocking-getch

hier sind die Methoden erklärt:

https://www.c-plusplus.net/forum/39320-full

Kommentar von HelpMeD3 ,

thx werde ich mir morgen mal durch lesen

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten