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
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.