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 hin 😞

    Der 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: SirLant

    Falls 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: SirLant

    Leer 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 beendet

    Zuvor 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)->STLFix

    MfG 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:

    STLFix


Anmelden zum Antworten