ueberspringt cin zeile
-
hallo,
hab ein problem mit cin bzw cin.getline.
das ist ein einfaches eingeben/ausgeben aus txtdatei-programm:die main
#include "cperson.h" #include "ckunde.h" void main (void) { CKunde k[100]; int auswahl; int i=0; cout << "Willkommen" << endl; cout << "Was wollen Sie machen ?" << endl; cout << "1. Kunde schreiben" << endl; cout << "2. Kunde lesen" << endl; cin >> auswahl; if(auswahl == 1) { k[i].daten_schreiben(); i++; } }die kunde.cpp
#include "CKunde.h" CKunde::CKunde(void) { //.... void CKunde::daten_schreiben(void) { cout << "--------------------------------------" << endl; cout << "Eingabe Daten" << endl; cout << "--------------------------------------" << endl; cout << "Name: "; cin.getline(name,20); cout << "Vorname: "; cin.getline(vname,20); cout << "Strasse (Name&Nr): "; cin.getline(str,30); cout << "PLZ: "; cin.getline(plz,7); cout << "Telefon: "; cin.getline(telefon,20); cout << "Kundennummer eingeben: "; cin.getline(kundennr,7); cout << "--------------------------------------" << endl; fstream schreib; schreib.open("kunde.txt", ios::app | ios::out); schreib << name << "\t" << vname << "\t" << str << "\t" << plz << "\t" << telefon << "\t" << kundennr << endl; schreib.close(); } } //...wenn man das jetzt so ausfuehrt dann ueberspringt es irgendwie das cin.getline von "name". dh in console steht da:"Name:Vorname:" und jetzt kann ich erst was eingeben. es schreibt zwar das cout << "Name" aber das cin.getline ueberspringt es. nach rumprobieren kam ich darauf das es an dem
cin >> auswahl;liegt. wenn ich das wegmache(und die if-schleife natuerlich) dann laeuft es wunderbar.
genauso geht es auch wenn ich die main so lass wie sie oben ist aber ich in der "void CKunde::daten_schreiben(void)" alles mit cin statt cin.getline mache. das cin.getline brauch ich aber(wegen leerzeichen usw.).ich hoffe ich konnt das einigermaßen verstaendlich ausdruecken was ich mein

-
Lies diesen Post hier. Dein Problem ist das gleiche.
Caipi
-
ja schon hab ich auch gelesen nach dem ich fertig war.
cin.clear(); cin.sync(); hilft mir jedoch auch nicht.
-
aber mit dem cin.get() gehts
danke
-
keinplan1337 schrieb:
cin.clear(); cin.sync(); hilft mir jedoch auch nicht.
Warum? Gleiches Problem wie vorher?
Sollte eigentlich funktionieren, da cin.clear(); eventuelle Fehlerbits und cin.sync() den Eingabepuffer löscht.Ansonsten kannst du die restlichen Zeichen im Puffer auch ignorieren.
Schreibe nach cin >> auswahl;cin.ignore(cin.rdbuf()->in_avail());Btw: Hast du dir auch den Link angesehen? (http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html).
Caipi
-
ja gleiches problem und ja ich hab es mir durchgelesen.
mit clear(),sync() gehts auch nich. im gegenteil es gibt mir alle cout sachen aus aber ich kann nirgens was eingeben. also es steht "Name:Vorname:Strasse....usw" da und das porg endet.
mit ignore() gehts auch .. mit cin.get() vor dem cin.getline() aber auch.
-
Probier doch einfach mal das Ende des Ausgabestreams anzugeben.
Soll heißen:cout << "Name: " << flush;