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...
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.
TheBest Geschrieben 2. Oktober 2006 Autor Geschrieben 2. Oktober 2006 nee...ich verwende Kdevelop unter Linux...
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?
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; }
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.
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.....
Klotzkopp Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 Bei mir funktioniert's damit. Kannst du ein kompilierbares Minimalbeispiel zeigen, das den Fehler reproduziert?
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
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?
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....
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.
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??
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?
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden