unerwünschte Tastaturaufforderung
-
Hallo,
ich bekomme hier beim ersten rekursiven Aufruf von loescheAdresse() eine Tastaturabfrage, bevor wieder "Name eingeben: " in findeAdresse() erscheint. Die cin.clear() Konstruktion kann ich nicht entfernen. Was kann ich da machen?
Treffer findeAdresse(string verzeichnis, vector <string> adressnamen){ Treffer f; f.treffer = 0; string such; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(),'\n'); cout << endl << "Name eingeben: "; getline(cin, such, '\n'); if (such == "0") return f; for (int i=0; i<adressnamen.size(); i++){ if (finden(such, adressnamen.at(i))){ zeigeAdresse(verzeichnis, adressnamen.at(i)); f.treffer ++; f.zeiger = i; } } if (f.treffer == 0) cout << endl << "Adresse nicht gefunden." << endl; return f; } void loescheAdresse(string verzeichnis, vector <string> &adressnamen){ Treffer l = findeAdresse(verzeichnis, adressnamen); if (l.treffer == 1){ cout << endl << "loeschen? [j] "; char ja = cin.get(); if (ja == 'j'){ loescheDatei(verzeichnis, adressnamen.at(l.zeiger)); adressnamen.erase(adressnamen.begin() + l.zeiger); schreibeIndex(verzeichnis, adressnamen); } } if (l.treffer > 1){ cout << endl; cout << "Es wurden mehrere Adressen gefunden." << endl; cout << "Welche ist gemeint?" << endl << "[taste]"; loescheAdresse(verzeichnis, adressnamen); } }
-
Ich konnte mein Problem lösen. Ich muss die cin.clear() Konstruktion in die main, vor dem ersten Aufruf von loescheAdresse() setzen und dafür aus der Funktion raus.
Kann man diese Konstruktion eigentlich mit 'Verwerfen/Zurücksetzen des Instreams' beschreiben?
EDIT: Gerade bemerkt, wenn ich stattdessen cin.sync() verwende, brauche ich gar nichts umzusetzen.