[C++]getline() -> überspringt etwas

zuerst der code:
Code:
...
string ein;
cout << "Eingabe:" << endl;
getline(cin, ein);
cin.get();               //damit getline nicht übersprungen wird

if (ein == "ENDE")
{
exit(0);
}

//hier wird ein noch inne datei geschrieben
...

nun das problem:

wenn ich bei getline() ankomme muss ich cin.get() einfügen, da das programm sonst sofort weitermacht. wenn ich jedoch ENDE eingebe wird dies ebenfalls übersprungen... wieso?
nach alldem schreibt das programm in eine datei -> dort fehlt von jedem wort der anfangsbuchstabe. Wie kann ich dafür sorgen dass der doch noch in der datei ankommt?
ich habe dazu gegooglet, finde nur allgemeine infos, nichts spezifisches zu dem problem.

dankbar für jeden lösungsvorschlag
Wolfy

PS: ich verwende visual c++ express edition 2008
 
falls Du cin>> und getline mischst, bleibt nach dem Einlesen durch >> das \n noch im Buffer und wird dann von getline() gelesen.
versuche mal vor der Eingabe den Eingabepuffer zu leeren:
Code:
// Eingabepuffer leeren
cin.seekg(0,std::ios::end);
cin.clear();

Zum Dateiproblem: fehlt da nicht etwas Code ;) ?
 
Also: Übersprungen wird dort erstmal nichts.
Alle Anweisungen werden ausgeführt.

Du meinst allerdings offenbar, daß an jener Stelle nicht auf irgendwelche Eingaben von der Konsole gewartet wird.

In dem Fall wirst Du VOR der dargestellten cin-Zeile schon mal eine solche zu stehen gehabt haben. Wo dann JENER Effekt eintritt, den CDW beschreibt.
Du solltest VOR dem nächsten cin jeweils dafür sorgen, daß ein eventuelles "Enter" ausgelesen wird.

Also von der Logik her: Unmittelbar NACHDEM Du irgendwelche Daten per cin gelesen hast, die EVENTUELL (abhängig von DEINER KONKRETEN Anwendung - die Hersteller der iostream-Bibliothek mußten zwangsläufig allgemeingültig bleiben) von Dir mit einem "Enter" abgeschlossen werden, solltest Du ein solches "Enter" aus dem Eingabestrom beseitigen!

Wenn Du "Ende" eingibst, SOLL Dein Programm doch exiten?!? Oder nicht?
 
okay, da habe ich micht nicht gut ausgedrückt, sry.
das programm soll ein vokabeltrainer werden, der eine deutsche und dann eine andere vokabel einliest, diese dann in eine datei schreibt und bei eingabe von ENDE das schreiben beendet.
wenn ich das programm so ausführe wie oben angegeben kommt folgendes raus:
original vom Programm:
Geben Sie die deutsche Vokabel ein:
hallo
Nun die andere:
hello
Geben Sie die deutsche Vokabel ein:
ENDE
/*nun sollte er abbrechen*/
Nun die andere:
/*tut er aber nicht*/

in der datei steht dann

@harry boeck: wenn ein nun == ENDE ist wird nicht abgebrochen (ich entnehme deinem post dass dann in ein "\nENDE" steht)

@cdw: also muss ich vor jedem getline() vor dem cin<< verwendet wurde den puffer leeren?

danke an euch beide!
Wolfy
 
@cdw: also muss ich vor jedem getline() vor dem cin<< verwendet wurde den puffer leeren?
So in etwa. Ich gebe keine Garantie darauf, da es schon länger her ist ;)
Was das ein==ENDE angeht:
lass Dir das "ein" doch mal ausgeben.

Das "Buchstaben_verschwinen" Problem würde ich auf das cin.get() zurückführen, da hier ein Buchstabe "gerfressen" wird, ohne in die Eingabe "ein" zu kommen.
 
Zurück
Oben