Wieso wird bei STR+C die Schleife unendlich mal ausgeführt?
-
MIt soll STRG+C soll verhindert werden, dass das Konsolenfenster geschlossen wird, das funktioniert auch doch sobald ich einmal STRG+C drücke, dann wird die Input Ausgabe unendlich mal ausgegeben, was ist hier falsch:
#include <windows.h> #include <iostream> #include <string> using namespace std; #pragma comment(lib, "user32.lib") BOOL WINAPI ConsoleHandler(DWORD CEvent) { switch(CEvent) { case CTRL_C_EVENT: break; } return TRUE; } int main() { string input; SetConsoleCtrlHandler(ConsoleHandler, TRUE); do { cout << "Eingabe:"; getline(cin, input); //... }while(1); CloseHandle(ConsoleHandler); return 0; }
-
weil cin.eof() danach true ergibt. mach mal cin.clear() vor jeder eingabe. es löscht die fehlerflags.
CloseHandle(ConsoleHandler);
ConsoleHandler ist eine Funktion und kein Handle.
-
Da der "ConsoleHandler" in einem anderen Thread aufgerufen wird!
-
Ne, da STRG + C eof bedeutet.
-
Jo und dadurch wird der stream "bad", und getline() tut nixmehr. Vermute ich mal.
-
Hab jetzt folgendes ergänzt und es funktioniert:
//... cin.clear(); cout << "Eingabe:"; getline(cin, input); //...
Die Zeile mit CloseHandle(ConsoleHandler); kann ich entfernen oder?
-
Das clear gehört nach den Aufruf von getline. Wenn du es davor aufrufst wird es einmal zu oft aufgerufen und verschwendet somit wertvolle CPU Zeit.
Und das CloseHandle kann weg.