CTRL-Z abfangen



  • Hallo,

    ich hab gerade ein kleines Problem bei einer Aufgabe. Ich lese mit einer Funktion eine Eingabe in einen std::string ein und müsste nun bei Eingabe von CTRL-Z die Funktion mit einem enstprechenden Integer (-1) verlassen. Nur leider weiß ich nicht wie ich beim Einlesen überprüfen soll ob irgendwann mal CTRL-Z eingegeben wurde/wird. Im Netz habe ich kaum etwas gefunden. Für Tipps wäre ich deshalb sehr dankbar. 🙂

    MFG
    Stefan



  • Unter Lunix verursacht Strg-Z ein Signal (SIG_PAUSE oder sowas), dass du abfangen kannst. Unter Windows ist es ein besonderes Zeichen, dass du aber (mit C++-Bordmitteln) erst erkennen kannst, wenn der String bereits gelesen ist. Solltest du etwas anderes wollen, schau dir libreadline oder das Konsolenunterforum an.



  • .filmor schrieb:

    Unter Lunix verursacht Strg-Z ein Signal (SIG_PAUSE oder sowas), dass du abfangen kannst. Unter Windows ist es ein besonderes Zeichen, dass du aber (mit C++-Bordmitteln) erst erkennen kannst, wenn der String bereits gelesen ist. Solltest du etwas anderes wollen, schau dir libreadline oder das Konsolenunterforum an.

    Hallo .filmor,

    danke für die Antwort. Ja, ich würde gerne unter Windows dieses Zeichen erkennen. Falls ich den string bereits eingelesen habe. Wie überprüfe ich die Zeichenkette danach? Welches Zeichen produziert die Eingabe von CTRL-Z?



  • Öhm, keine Ahnung. Aber du kannst es recht leicht ausprobieren:

    #include <iostream>
    
    int main ()
    {
        char c;
        std::cin >> c;
        std::cout << static_cast<int> (c) << std::endl;
    }
    

    Jetzt einfach das Programm ausführen, Strg-Z eintippen und schon wird dir der Zahlenwert des Zeichens ausgegeben.



  • .filmor schrieb:

    Jetzt einfach das Programm ausführen, Strg-Z eintippen und schon wird dir der Zahlenwert des Zeichens ausgegeben.

    Hallo,

    auf die Idee bin ich leider schon gekommen. CTRL+Z scheint auf Windows als EOF interpretiert zu werden. Folglich lässt es sich einlesen solange !cin.eof() gilt. Der oben genannte Code zur Ermittlung des Dezimalwertes liefert den Wert 0. Laut ASCII Tabelle hat CTRL+Z aber den Hexwert 1A. Leider lässt sich das so nicht abfangen. Ich habe zwar eine Möglichkeit gefunden strings solange einzulesen bis CTRL+Z gedrückt wird, aber das ist nicht genau das was ich benötige. Ich müsste den Wert in einem bereits eingelesenen std::string finden. find() liefert leider auch nicht das gewünschte ergebnis. Vielleicht gibt es da aber noch eine Variante...

    Trotzdem Danke 🙂


Anmelden zum Antworten