cin.sync(); oraz getline. Dlaczego pomija cout.

0

Witajcie, mam problem ze zrozumieniem pewnego zjawiska. Otóż jeśli mam taki kod:

 #include <iostream>

using namespace std;

struct DC_and_Marvel
{
string who;
string title;
int years;
};
int main()
{

    DC_and_Marvel *ps = new DC_and_Marvel;

    cout << "Jaki tytul nosi komis: ";
    getline(cin, (*ps).title);

    cout << "Kto napisal komiks: ";
    getline(cin, (*ps).who);
    cout << "Jaki rok wydania: ";
    cin>>(*ps).years;

    cout << (*ps).who << ", " << (*ps).title << ", " << (*ps).years;
    delete ps;
    return 0;
}

i on działa bez zarzutu, wszystko rozumiem, ale gdy tylko usunę

getline(cin, (*ps).title); 

i skompiluje programik, to po wpisaniu tytułu, drugie pytanie zostaje pomijane i wczytuje kolejne pytanie. Wtedy wystarczy dodać po pierwszym getline cin.sync();

 i wszystko działa poprawnie.
Do tej pory dowiedziałem się jak działa bufor czyszczący ale zaskoczyło mnie zachowanie programu bez wypisywania komendy czyszczącej. Dlaczego pojawia mi się pytanie a pomija cina wyświetlając kolejne? 
Gdy wyświetlam na końcu wynik, to nie widzi mi nawet spacji ani zera. Nie jestem pewny tego czego się dowiedziałem, dlatego proszę o pomoc.
4

Czyszczenie bufora

cin.sync() 

, to efekt uboczny. Ta metoda nie do tego służy.
Metoda

cin.ignore() 

jest do tego celu.

Użycie operatora

>> 

po wczytaniu danych pozostawia znak nowego wiersza.
Po użyciu tego operatora oczyść bufor strumienia i problem zniknie.
Podobny wątek

4

Zamiast (*ps).years; możesz używać ps->years, a nawet powinieneś.

0

Dziękuje za wskazanie błędu i temat o takim samym błędzie. Teraz wszystko rozumiem :)

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