TheBest Geschrieben 1. Oktober 2006 Geschrieben 1. Oktober 2006 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... Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 Benutzt du Visual C++ 6? Ich glaube mich zu erinnern, dass es da einen Bug gab. Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 nee...ich verwende Kdevelop unter Linux... Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 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? Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 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; } Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 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. Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 Ich habe vor jedem Aufruf von cin.getline() das gegebene eingefügt, doch es ist immer noch das selbe problem..... Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 Bei mir funktioniert's damit. Kannst du ein kompilierbares Minimalbeispiel zeigen, das den Fehler reproduziert? Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 ich habe alles in eine cpp gepackt -----> http://rapidshare.de/files/35202566/neu.cpp.html Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 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? Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 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.... Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 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. Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 Komischerweise bei mir nciht. Liegt es eventuel daran, dass ich mit KDevelop C/C++ arbeite?? Zitieren
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 Komischerweise bei mir nciht.Was genau heißt denn "funktioniert nicht"? Wie äußert sich der Fehler? Zitieren
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.