Niedziałająca metoda getline w funkcjach

0

Witam,

Mam kłopot z getline() w funkcji, mianowicie po wywołaniu nie pozwala mi wprowadzić danych, a gdy mam dwie zmienne typu string to omija pierwsze wywołanie i wprowadzenie danych jest możliwe dopiero do drugiej zmiennej. Nie wiem w czym tkwi problem, bardzo proszę o jakieś wskazówki.

Oto funkcja:


map<string,string> usuniecie_uzytkownika (map<string,string> &mapa)
{
    string dane;
    cout<<"Podaj imie i nazwisko uzytkownika: ";
    getline(cin, dane, '\n');
    map<string,string>::iterator itr = mapa.find(dane);

    if (itr!=mapa.end())
    {
        cout<<"Skasowano uzytkownika "<<dane<<".";
        mapa.erase(dane);
    }
    else cout<<"Nie znaleziono uzykownika";
    Sleep(2000);
    return mapa;
}

2

Zapewne gdzieś wcześniej robisz cin>>zmienna i znak nowej linii (bo wcisnąłeś enter!) zostaje w buforze. Potem ten getline go łyka.

0

Po co zwracasz kopię mapy? To cholernie niewydajne, kompilator nie zrobi Ci tutaj magii, ponieważ nie jest to żadna lokalna zmienna.

1

Nie mieszaj getline ze strumieniem cin jakimkolwiek. Ewentualnie czyść ten strumień przed każdym getline.

0

Dzięki za rady, wyczyszczenie strumienia pomogło. W mainie mam switcha pod którego podpinam odpowiednie funkcje i widocznie zostawały jakieś resztki buforze.

1

Jakiś czas temu opisywałem problem http://kaczus.ppa.pl/art/Skrzynia_porad,18.html#getline

1 użytkowników online, w tym zalogowanych: 0, gości: 1