Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy wymagane jest czyszczenie buforu po getline()?

Ostatnio zmodyfikowano 2017-06-27 16:26
Autor Wiadomość
SaJmoN170
Temat założony przez niniejszego użytkownika
Czy wymagane jest czyszczenie buforu po getline()?
» 2017-06-27 15:10:33
Nigdzie nie mogę tego znaleźć. Jeśli czyszczę bufor po getline() to z jakiegoś powodu muszę wcisnąć 2 razy enter. Jeśli usunę czyszczenie bufora po getline() to nie widać żadnych problemów.
Mam Linuxa (Arch Linux), i czyszczę bufor małą funkcją którą napisałem:

void ClearInput()
{
    cin.clear();
    cin.ignore(numeric_limits < streamsize >::max(), '\n' );
}
P-162866
pekfos
» 2017-06-27 15:14:01
To nie czyść bez powodu.
P-162867
SaJmoN170
Temat założony przez niniejszego użytkownika
» 2017-06-27 15:18:14
No właśnie chciałem wiedzieć czy jest jakiś powód by czyścić strumień po getline(), bo po cin zawsze trzeba to robić. Czyli getline() samo to robi?
P-162868
pekfos
» 2017-06-27 15:28:36
Nigdy nie trzeba czyścić. To tylko efekt, który w niektórych przypadkach może być pożądany, np gdy wystąpi błąd. To o czym piszesz to różnice w zachowaniu >> i std::getline(). Powinieneś przeczytać dokumentację, a nie wstawiać wszędzie te czyszczenie.
P-162869
1aam2am1
» 2017-06-27 15:29:53
Nie getline działa inaczej od cin.
cin wczytuje to co pragniesz int string
getline tylko string. Więc nie umieszcza błędów strumienia spowodowanych błędem typu danych.
Dodatkowo cin na końcu wczytywania zostawia znak \n jeżeli wystąpił. I przy następnym wczytywaniu wie że może się on pojawić i nic z tego sobie nie robi.
Natomiast getline wczytuje wszystko aż do napotkania znaku \n i następnie go usuwa. Tak że ten znak po wczytaniu nie występuje w strumieniu.
Należy o tym pamiętać mieszając te dwa typy wczytywania danych.
P-162870
SaJmoN170
Temat założony przez niniejszego użytkownika
» 2017-06-27 15:46:03
Dziękuję za odpowiedzi, jeszcze się uczę C++ (przez prawie cały rok nie miałem na to czasu). Takie pytanie może się dla was wydawać banalne, ale dla mnie jednak było problemem. Nie myślałem o tym, że trzeba sprawdzać dokumentację, jednak w dokumentacji na tej stronie nic nie ma o getline() i cin, więc nawet jakbym chciał to sprawdzić, to bym nie mógł. Owszem, mógłbym to sprawdzić na innych stronach, ale skoro nie było tego na tej stronie, to raczej nie było to chyba tak ważne (bo na tej stronie są same najważniejsze rzeczy związane z C i C++). Poza tym, już na samym początku kursu jest powiedziane, by czyścić bufor. getline() używa się z cin (getline(cin, zmienna)), więc myślałem że skoro przy cin trzeba czyścić bufor, to przy getline(cin, zmienna) też trzeba. No i jeśli bufor nie będzie wyczyszczony przed getline(cin, zmienna) to będą błędy.
P-162871
pekfos
» 2017-06-27 15:55:34
jednak w dokumentacji na tej stronie nic nie ma o getline() i cin, więc nawet jakbym chciał to sprawdzić, to bym nie mógł.
Pierwsza dokumentacja do sprawdzenia, to dokumentacja angielska. Tutejsza tłumaczona na polski dokumentacja jest z definicji niekompletna.
P-162872
SaJmoN170
Temat założony przez niniejszego użytkownika
» 2017-06-27 16:11:07
Nie chcę się już wykłócać, jednak w dokładnie następnym zdaniu napisałem dlaczego nie sprawdziłem dokumentacji na innych stronach. Poza tym, ja np. znam j. angielski, ale co z osobami, które go nie znają? Wiadomo, lepiej, żeby się nauczyły, ale raczej spytają się na forum, bo nie będą się uczyć całego angielskiego tylko po to, by dowiedzieć się, dlaczego getline się inaczej zachowuje (zwłaszcza jak dopiero zaczynają). I co wtedy? Takie chłodne odpowiadanie im "sprawdź sobie w dokumentacji" tylko ich zniechęci.
P-162874
« 1 » 2
  Strona 1 z 2 Następna strona