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

cin.ignore() - argumenty

Cloud VPS
0 głosów
1,291 wizyt
pytanie zadane 20 czerwca 2018 w C i C++ przez Agnes Użytkownik (990 p.)
cout << "Wprowadz tytul. ";
getline(cin, newalbum[i].title);
cin.ignore();
cout << "Wprowadz wykonawce. ";
getline(cin, newalbum[i].band);
cin.ignore();

Po podaniu tytułu i wciśnięciu entera, znak '\n' znajduje się w buforze i powinien być wczytany przez cin.ignore(), dzięki czemu można wczytać kolejną zmienną. A dzieje się to tak naprawdę dopiero po wciśnięciu dwóch enterów po podaniu tytułu.

Widzę też, że jeśli parametrem obu z cin.ignore() będzie 0 to wtedy wystarczy jednokrotnie nacisnąć enter i wszystko działa jak należy.

A przecież cin.ignore(0) wydaje mi się nie mieć sensu. Jak to, metoda ma wczytać 0 argumentów? Czyli po prostu ma nie wczytywać żadnego...

I dlaczego cin.ignore() bez argumentu zachowuje się tak, jak to opisane, skoro domyślnym jego argumentem jest 1?

2 odpowiedzi

0 głosów
odpowiedź 20 czerwca 2018 przez magmat Początkujący (390 p.)
spróbuj cin.get(); zmiast ignore
komentarz 20 czerwca 2018 przez Agnes Użytkownik (990 p.)
Dzieje się dokładnie to samo co z cin.ignore().
komentarz 20 czerwca 2018 przez magmat Początkujący (390 p.)
moge zobaczyc deklaracje title i band?
komentarz 20 czerwca 2018 przez Agnes Użytkownik (990 p.)
struct album {
	int year, code, tracks;
	string title, band;
	double price;
};

 

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

Po podaniu tytułu i wciśnięciu entera, znak '\n' znajduje się w buforze i powinien być wczytany przez cin.ignore()

No właśnie nie. Getline wczytuje całą linię włącznie ze znakiem \n, ale nie zapisuje tego znaku do stringa.

cin.ignore(0); nie próbuje niczego wczytać, a cin.ignore() chce wczytać jeden znak i gdy go nie ma w buforze to czeka. A nie ma go, bo wcześniejsze getline go wczytało, dlatego musisz naciskać enter dwa razy.

komentarz 20 czerwca 2018 przez Agnes Użytkownik (990 p.)
Więc cin.ignore() tu nie jest w ogóle potrzebny?
komentarz 20 czerwca 2018 przez monika90 Pasjonat (22,940 p.)
edycja 20 czerwca 2018 przez monika90
Nie jest potrzebne.

Ignore jest potrzebne jeżeli wczytujesz coś za pomocą operatora >>, a następną rzecz chcesz wczytać za pomocą getline, to wtedy dajesz ignore pomiędzy nimi.
komentarz 20 czerwca 2018 przez Agnes Użytkownik (990 p.)
No tak, dzięki

Podobne pytania

0 głosów
2 odpowiedzi 2,735 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez patryk123 Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 1,748 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Hinzeq Użytkownik (860 p.)
0 głosów
2 odpowiedzi 1,340 wizyt

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 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

Kursy INF.02 i INF.03
...