Probleme mit dem Tastaturpuffer und cin
-
Ich hab aus OOP für Dummies eines der Listings abgeschrieben, aber es arbeitet
nicht richtig und ich bekomme es nicht hinDer Fehler liegt wohl in folgendem Code:
void BookView::editAuthor () { cout << "Author eingeben: "; string author; getline (cin, author); m_Book.setAuthor (author); } void BookView::editTitle () { cout << "Titel eingeben: "; string title; getline (cin, title); m_Book.setTitle (title); } void BookView::editAuthorTitle () { cout << "Bitte Daten eingeben" << endl; cout << "Autor: "; string author; getline (cin, author); cout << "Titel: "; string title; getline (cin, title); m_Book.setTitle (title); m_Book.setAuthor (author); }
Diese werden so aufgerufen:
view.editAuthor (); view.showAuthorTitle (); view.editTitle (); view.showAuthorTitle (); view.editAuthorTitle (); view.showAuthorTitle ();
Und so sieht die Ausgabe&Eingabe aus:
Author eingeben: SirLant
Autor: SirLant
Titel:Titel eingeben: TollerTitel
Autor: SirLant
Titel:Bitte Daten eingeben
Autor: SirLant
Titel: TollerTitel
Autor: TollerTitel
Titel: SirLantFalls es wichtig sein sollte ich verwende den MS VC++ 6
-
Guten Abend.
SirLant schrieb:
Author eingeben: SirLant
Autor: SirLant
Titel:Titel eingeben: TollerTitel
Autor: SirLant
Titel:Bitte Daten eingeben
Autor: SirLant
Titel: TollerTitel
Autor: TollerTitel
Titel: SirLantLeer mal den Eingabe-Puffer nach jedem cin und schau ob der Fehler weiterhin besteht.
cin.sync();// oder: cin.ignore(cin.rdbuf()->in_avail());
MfG Max
-
habe es jetzt so geändert:
void BookView::editAuthor () { cout << "Author eingeben: "; string author; getline (cin, author); cin.ignore(cin.rdbuf()->in_avail()); m_Book.setAuthor (author); } void BookView::editTitle () { cout << "Titel eingeben: "; string title; getline (cin, title); cin.ignore(cin.rdbuf()->in_avail()); m_Book.setTitle (title); } void BookView::editAuthorTitle () { cout << "Bitte Daten eingeben" << endl; cout << "Autor: "; string author; getline (cin, author); cin.ignore(cin.rdbuf()->in_avail()); cout << "Titel: "; string title; getline (cin, title); cin.ignore(cin.rdbuf()->in_avail()); m_Book.setTitle (title); m_Book.setAuthor (author); }
Jetzt sieht die Ausgabe so aus:
Author eingeben: Sascha //Enter
//Enter
Autor: Sascha
Titel:
//Enter
Titel eingeben: Foo//Enter
//Enter
Autor: Sascha
Titel: Foo//Enter
//Enter
Bitte Daten eingeben
Autor: Foo//Enter
//Enter
Titel: Sas//Enter
//Enter
Autor: Foo
Titel: Sas
//Enter
//Enter
//Enter <- Programm wird nicht beendetZuvor musste ich nur nach eingaben Enter drücken und einaml nach der ersten
Eingabe. Eigentlich sollte dies nicht sein, außer ich vertsehe die iostream
Bibliothek noch nicht so ganz.
-
Guten Tag.
Das ist ein Bug in der VC++(version 6.0) STL, hatte ich auch, du brauchst den Patch von HumeSikkins. -schau mal auf seiner Site.Da ist er: http://www.bens.c-plusplus.info/
MfG Max
-
Ich weiß nicht genau was ich da jetzt brauche das meinem Problem hilft, könntest
du mir einen direkten Download link geben?
-
Guten Tag.
Geht leider nicht, die Site hat immer dieselbe adresse, klick dich folgend durch:
Programmieren->Tools (ganz unten)->STLFixMfG Max
-
Danke jetzt funktioniert es einwandfrei
-
SirLant schrieb:
Ich weiß nicht genau was ich da jetzt brauche das meinem Problem hilft, könntest
du mir einen direkten Download link geben?Master_Max schrieb:
Geht leider nicht, die Site hat immer dieselbe adresse,
Sicher geht das: