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.


Log in to reply