1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Testen von STRG + D

  • master_fluc
  • 25. März 2007 um 14:41
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • master_fluc
    Punkte
    345
    Beiträge
    57
    • 25. März 2007 um 14:41
    • #1

    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?

  • gelbasack
    Punkte
    6.525
    Beiträge
    1.241
    • 25. März 2007 um 14:44
    • #2

    Ja, liefert dann false.

  • master_fluc
    Punkte
    345
    Beiträge
    57
    • 25. März 2007 um 15:20
    • #3

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

  • Trux
    Punkte
    1.396
    Beiträge
    274
    • 25. März 2007 um 15:27
    • #4

    unter windows oder linux?
    bei windows isses afaik: strg+z

  • master_fluc
    Punkte
    345
    Beiträge
    57
    • 25. März 2007 um 15:33
    • #5

    Super, danke, genau das wars :thumb:

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 25. März 2007 um 17:10
    • #6
    Zitat von master_fluc

    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:

    C
    #include <iostream>
    #include <string>
    
    
    int main(void)
    {
        std::string input;
        while (std::cin.good())
        {
            std::getline(std::cin, input);
            std::cout << "'" << input << "'" << std::endl;
        }
        return 0;
    }
    Alles anzeigen


    mit:

    C
    #include <iostream>
    #include <string>
    
    
    int main(void)
    {
        std::string input;
        while (std::getline(std::cin, input))
            std::cout << "'" << input << "'" << std::endl;
        return 0;
    }
    Alles anzeigen

    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum