Veröffentlicht 1. Oktober 200618 j Wenn ich ein charfeld mit cin.getline() einlese und dann ein anderes charfeld wieder mit cin.getline() einlese, wieso liest er nur beim ersten mal das charfeld ein?? Das zweite charfeld wird dann irgendwie nicht eingelesen... was habe ich falsch gemacht?? Danke schon einmal im voraus...
2. Oktober 200618 j Liest du zwischendurch noch irgendetwas anderes über cin << ein? Kannst du deinen Code zeigen, oder, falls der zu lang ist, einen kurzen Beispielcode, der das Problem reproduziert?
2. Oktober 200618 j ich ahb hei mal den code reingeknackt. C_Mensch::C_Mensch() { strcpy(Name,"leer"); Alter=0; Geschlecht=true; Familienstand=true; } C_Mensch::C_Mensch(char *name,int alter, bool geschlecht, bool familienstand) { strcpy(Name,name); Alter=alter; Geschlecht=geschlecht; Familienstand=familienstand; } void C_Mensch::set() { char a; cout<<"Bitte Namen eingeben: "; cin.getline(Name,20); [COLOR="Red"]//hier das erste mal[/COLOR] cout<<"Bitte Alter eingeben: "; cin>>Alter; do { cout<<"Bitte Familienstand eingeben(l/v): "; cin>>a; if(a=='l') { Familienstand=true; break; } else { if(a=='v') { Familienstand=false; break; } else cout<<"Falsche Eingabe! Erneute Eingabe!"<<endl; } }while(1); do { cout<<"Bitte Geschlecht eingeben(m/w): "; cin>>a; if(a=='m') { Geschlecht=true; break; } else { if(a=='w') { Geschlecht=false; break; }else cout<<"Falsche Eingabe! Erneute Eingabe!"<<endl; } }while(1); } void C_Mensch::show() { cout<<"\n\nAusgabe der Daten"<<endl; cout<<"+++++++++++++++++"<<endl; cout<<"\n Name: "<<Name<<endl; cout<<"Alter: "<<Alter<<endl; if(Familienstand) { cout<<"Familienstand: ledig"<<endl; } else cout<<"Familienstand: verheiratet"<<endl; if(Geschlecht) cout<<"Geschlecht: maennlich"<<endl; else cout<<"Geschlecht: weiblich"<<endl; } bool C_Mensch::Ehe(C_Mensch human) { if(Alter>=18) { if(human.Alter>=18) { if(Familienstand==true) { if(human.Familienstand==true) { if(Geschlecht!=human.Geschlecht) return true; }else return false; }else return false; }else return false; }else return false; } void C_Mensch::operator++() { Alter++; } C_Schueler::C_Schueler() { C_Mensch::C_Mensch(); Snummer=0; strcpy(Datum,"01.09.00"); } C_Schueler::C_Schueler(int nummer,char* date,char* name, int alter, bool sex, bool stand):C_Mensch(name,alter,sex,stand) { Snummer=nummer; strcpy(Datum,date); } void C_Schueler::set() { C_Mensch::set(); cin.unget(); cout<<"Bitte Schuelernummer eingeben: "; cin>>Snummer; cout<<"Bitte Datum eingeben (tt.mm.jj): "; cin.getline(Datum,8); [COLOR="#ff0000"]//hier das 2.mal , hier funktioniert es nicht[/COLOR] } void C_Schueler::show() { C_Mensch::show(); cout<<"\nSchuelernummer: "<<Snummer; cout<<"\nDatum: "<<Datum; }
2. Oktober 200618 j Das Problem ist vermutlich, dass nach einem cin << das Zeilenendezeichen noch im Eingabepuffer liegt, und damit der nächsten Aufruf von getline einen leeren String erkennt. Das sollte sich beheben lassen, indem du vor jedem Aufruf von getline folgendes einfügst: cin.ignore(cin.rdbuf()->in_avail());Damit löschst du alles, was noch im Eingabepuffer liegt.
2. Oktober 200618 j Ich habe vor jedem Aufruf von cin.getline() das gegebene eingefügt, doch es ist immer noch das selbe problem.....
2. Oktober 200618 j Bei mir funktioniert's damit. Kannst du ein kompilierbares Minimalbeispiel zeigen, das den Fehler reproduziert?
2. Oktober 200618 j ich habe alles in eine cpp gepackt -----> http://rapidshare.de/files/35202566/neu.cpp.html
2. Oktober 200618 j Mal abgesehen davon, dass C_Schueler::Datum um eins zu klein ist (das Nullzeichen nicht vergessen), läuft das bei mir prima. Wie äußert sich der Fehler bei dir denn?
2. Oktober 200618 j also...ich hatte das letzte cin.getline() mit cin ersetzt....dadurch funktionierte es auch...aber sobald das cin.getline() ein 2. mal verwendet wird funktioniert es nicht...er überspringt einfach die datumeingabe....
2. Oktober 200618 j Hast du denn da auch cin.ignore eingefügt? Wenn ich das cin << in C_Schueler::set durch cin.ignore(cin.rdbuf()->in_avail()); cin.getline(Datum, 8); [/code]ersetze, klappt's immer noch.
2. Oktober 200618 j Komischerweise bei mir nciht. Liegt es eventuel daran, dass ich mit KDevelop C/C++ arbeite??
2. Oktober 200618 j Komischerweise bei mir nciht.Was genau heißt denn "funktioniert nicht"? Wie äußert sich der Fehler?
2. Oktober 200618 j ICh kann alles wie gehabt eingeben...Name, Alter, Familienstand, Geschlecht und Schülernummer. Aber wenn ich die Schülernummer eingebe und dann enter drücke überspringt er das Datum und geht gleich zur Ausgabe..... hier einmal ein screenshot: http://img208.imageshack.us/my.php?image=namenlosnz2.jpg
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.