none
Aus der MSDN Hotline: EOF von der Befehlszeile einlesen RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:

    Das Problem ist, dass ich crtl+z (EOF) zwei mal drücken muss, bevor das Programm die Eingabe abbricht und das Ergebniss Ausgibt. Funktioniert "ctrl+z" nur am Zeilenanfang "richtig"?


    #include<iostream>
    #include<string>
    #include<iterator>
    #include<map>
    #include<algorithm>
    
    using namespace std;
    
    map<string,int> histogram;
    
    void ausgeben(const pair<const string,int>& r);
    void merken(const string& s);
    
    int main()
    {
        typedef istream_iterator<string> ii;    ii eof;
        for_each( ii(cin), eof, merken );
        for_each( histogram.begin(), histogram.end(), ausgeben);
    }
    
    void ausgeben(const pair<const string,int>& r)
    {
        cout << r.first << ' ' << r.second << endl;
    }
    
    void merken(const string& s)
    {
        histogram[s]++;
    }


    bzw. unser Lösungsvorschlag darauf war:

    Dein Programm ist korrekt ( und guter Stil! ).

    Sobald es auf ein "End of File" stößt wird es aufhören den Input zu lesen.

     

    Im C++ Standard ist allerdings nicht definiert wann eine Konsole ein "End of File" sendet. Das ist Plattform- und Konsolenabhängig. Auch die Tastenkombination "ctrl + z" ist keineswegs universell.

    Die Windows Konsole möchte tatsächlich, das "ctrl + z" am Anfang der Zeile steht.

    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Markus Klein
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.
    • Bearbeitet Klein, Markus Dienstag, 20. Oktober 2009 00:24 unnötige Zeilenumbrüche entfernt
    • Verschoben Robert BreitenhoferModerator Freitag, 25. Juni 2010 09:08 C++ (aus:Aus der MSDN Hotline: Häufig gestellte Fragen und deren Antworten)
    Donnerstag, 10. September 2009 10:12