Getline wartet nich auf Eingabe

Lesterdor

Erfahrenes Mitglied
Guten Abend liebe Community,

ich habe vorhin einfach ein kleines Programm geschrieben. Der Benutzer gibt seine Daten (Name, Vorname usw.) an und am Ende wird seine komplette Adresse ausgegeben:

Code:
#include <iostream>

using namespace std;

int main()
{
 string name, vorname, strasse, ort;
 int PLZ=0, hausnr=0;
 cout<<"Hallo, ich werde dir deine Adresse zusammenbauen\n.Doch dafür benoetige ich einige Informationen:\n";
 cout<<"Wie lautet dein Nachname ?\n";
 getline(cin,name);
 cout<<"Wie lautet dein Vorname ?\n";
 getline(cin,vorname);
 cout<<"Wie lautet deine Strasse?\n";
 getline(cin,strasse);
 cout<<"Wie lautet deine Hausnummer?\n";
 cin>>hausnr;
 cout<<"Wie lautet deine Postleitzahl?\n";
 cin>>PLZ;
 cout<<"Wie lautet dein Wohnort ?\n";
 getline(cin,ort);
 cout<<"Hier deine Adresse:\n";
 cout<<vorname<<" "<<name<<"\n"<<strasse<<" "<<hausnr<<"\n"<<PLZ<<" "<<ort<<"\n";
 system("PAUSE");
 return 0;
}

Es funktioniert auch alles bis zum Wohnort: Er zeigt die Ausgabe in der Console richtig an: Wie lautet dein Wohnort, doch danach erzeugt er schon die gesamte Adresse. Es wird also quasi getline(cin, ort); ignoriert.

Seltsamerweise habe ich zum testen einfach alles außer:
Code:
 cout<<"Wie lautet dein Wohnort ?\n";
 getline(cin,ort);
 cout<<"Hier deine Adresse:\n";
 cout<<vorname<<" "<<name<<"\n"<<strasse<<" "<<hausnr<<"\n"<<PLZ<<" "<<ort<<"\n";
 system("PAUSE");
 return 0;
}
auskommentiert. Dann zeigt er alles an nachdem ich einen Wohnort eingegeben habe und enter gedrückt habe.

Ich hoffe, mir kann jemand helfen

Danke im Voraus
 
Hi, ich weiß selbst nicht wieso, aber irgendwie scheint in dem Programm der Eingabepuffer nach dem cin>>PLZ; voll zu sein.
Warum kann dir sicher jemand anderes erklären, helfen wird dir aber schonmal das einbringen folgender Zeile in deinen Code:

Code:
cin>>PLZ;
 fflush(stdin);
 cout<<"Wie lautet dein Wohnort ?\n";

Achja und in deinem Code fehlt oben die Zeile "#include <string>", erst danach war es bei mir kompilierbar.

Gruß Jennesta
 
Hi.
Warum kann dir sicher jemand anderes erklären, helfen wird dir aber schonmal das einbringen folgender Zeile in deinen Code:

Code:
cin>>PLZ;
 fflush(stdin);
 cout<<"Wie lautet dein Wohnort ?\n";
Das ist nicht richtig. Laut C Standard ist fflush für Eingabestreams nicht definiert. Es ist also eine ganz schlechte Idee.

@Lesterdor: Das Problem ist einfach, das du natürlich bei der Eingabe der PLZ die Eingabetaste drücken müßt (also ein Newline erzeugt wird).
C++:
cin >> PLZ;
Liest aber nur die Zahl aus und das Newlinezeichen bleibt im Eingabepuffer.

Dieses Newlinezeichen müßtest du erstmal entfernen bevor du den Wohnort eingibst:
C++:
cin.ignore(5000, '\n'); // max. 5000 Zeichen bis zum nächsten Newline ignorieren
Allerdings sind Postleitzahlen keine Zahlen. Du solltest die Postleitzahl als Strings speichern und getline benutzen um sie einzulesen.

\edit: Hausnummern sind übrigens auch keine Zahlen. Hausnummer 14b ?

Gruß
 
Zuletzt bearbeitet:
Guten Tag,

vielen lieben Dank für eure Hilfe. Es funktioniert jetzt alles, wie gewollt. Und Danke für den Tipp mit der Hausnummer und der PLZ als String. An Dinge wie 14b habe ich zu dem Zeitpunkt gar nicht gedacht ;)
 
Zurück