Testen von STRG + D

  • Hi,

    ich lese in meinem Programm immer zeilenweise mittels getline von der standardeingabe. Beendet werden soll es, wenn der User STRG+D (also EOF) eingibt.

    Code
    while(cin.good())
            {
                getline(cin,sInput);
                ...
    }

    ich kann doch annehmen, dass cin.good() false liefert, wenn jemand STRG+D (also EOF) eingibt, oder?
    Wie könnte ich es sonst prüfen?

    Better to reign in hell,
    than serve in heaven.
    (John Milton, Paradise Lost)

  • hmm, es funktioniert aber nicht, da ich STRG + C beenden muss, um das Programm zu beenden ...

    Better to reign in hell,
    than serve in heaven.
    (John Milton, Paradise Lost)

  • Wie könnte ich es sonst prüfen?


    getline gibt ein istream-Objekt zurück, das du (mittels eingebautem operator void *) einfach in der while-Bedingung überprüfen kannst. Vergleiche:


    mit:

    Die erste (deine) Variante wird, wenn du an einem Zeilenanfang end-of-file signalisierst, noch eine leere Zeile lesen; die zweite bricht richtigerweise ab.

    Das liegt daran, daß good() und ähnliches nicht vorausschauend ist; das EOF-Bit wird erst gesetzt, nachdem ein Leseversuch tatsächlich auf end-of-file getroffen ist, und nicht, wenn der nächste Leseversuch end-of-file finden wird. Die Überprüfung ist also nur sinnvoll nach einem Leseversuch, aber noch bevor du etwas mit dem Ergebnis machst. Wie im zweiten Beispiel.

    *plantsch*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!