• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

cin.ignore(), cin>> i zachowanie bufora

0 głosów
502 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Agnes Użytkownik (990 p.)
struct album {
    int year;
    string title;
    double price;
};
void zadanie()
{
    album newalbum[5];
    for (int i = 0; i < 5; i++)
    {
        cout << "Wprowadz rok wydania.";
        cin >> newalbum[i].year;
        cout << "Wprowadz tytul.";
        getline(cin, newalbum[i].title);
        cout << "Wprowadz cene.";
        cin >> newalbum[i].price;
    }
    cout << endl;
 
    for (int i = 0; i < 5; i++)
    {
        cout << "Rok wydania: " << newalbum[i].year << endl;
        cout << "Tytul: " << newalbum[i].title << endl;
        cout << "Cena: " << newalbum[i].price << endl;
    }
 
}

W tym przypadku zakładając, że użytkownik po podaniu roku wpisze np. trzy spacje i dopiero potem wciśnie enter... Nie będzie wtedy tak, że cin.ignore() bez argumentu zignoruje ostatni znak, który dostał, czyli właśnie '\n' i wtedy te spacje byłyby traktowane jako część zmiennej newalbum[i].year? Oczywiście to byłby błąd, gdyż ona jest typu int. Ale to wygląda tak, czy inaczej?

1 odpowiedź

0 głosów
odpowiedź 14 czerwca 2018 przez monika90 Pasjonat (22,940 p.)
wybrane 20 czerwca 2018 przez Agnes
 
Najlepsza

Gdyby po cin >> year było cin.ignore() to cin.ignore() wczytałoby pierwszą z 3 spacji. Dwie kolejne spacje i znak \n wczytałoby getline i tytułem albumu byłyby dwie spacje. Dlatego daj tam

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

to wczyta wszystkie 3 spacje i znak '\n' też.

Podobne pytania

0 głosów
1 odpowiedź 1,140 wizyt
0 głosów
0 odpowiedzi 500 wizyt
pytanie zadane 10 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
0 głosów
2 odpowiedzi 2,995 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez patryk123 Nowicjusz (170 p.)

93,735 zapytań

142,671 odpowiedzi

323,294 komentarzy

63,297 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...