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

[Lekcja 15] cin.sync() vs cin.ignore(numeric_limits <streamsize>::max(), '\n')

Ostatnio zmodyfikowano 2013-08-15 00:43
Autor Wiadomość
Monika90
» 2013-08-15 00:04:46
@MrPoxipol
_WIN32 nie daje gwarancji, że cin.sync() zrobi to co chcesz,
a ponieważ cin.ignore(numeric_limits<streamsize>::max(), '\n'); działa, i w Windows, i w Lunuksie, i w każdej zgodnej ze standardem implementacji, to po co sprawdzać jaki to system, można po prostu używać tego wszędzie.
P-90326
Arnimarl
Temat założony przez niniejszego użytkownika
» 2013-08-15 00:23:27
Dobrze mistrzowie C++:)
Ale co dokladnie wykonuje
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
  ??

To raz, a dwa... teraz, kiedy juz znam rozwiazanie, czy jest ktos w stanie wytlumaczyc, czemu kod z pierwszego postu dzialal blednie?
P-90327
Monika90
» 2013-08-15 00:43:37
numeric_limits < streamsize >::max()
 to jest maksymalna wartość jaką może przyjmować zmienna typu streamsize, np. może to być 2147483647.

Czyli
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
 to jest to samo co
cin.ignore( 2147483647, '\n' );
 a to znaczy wczytuj i ignoruj znaki z
cin
 aż nie napotkasz znaku
'\n'
, ale nie wczytaj więcej niż 2147483647 znaków.

!!!EDIT!!!:
Po zajrzeniu do standardu okazało się, że ignore traktuje
numeric_limits < streamsize >::max()
 jako specjalną wartość, która oznacza brak limitu ilości wczytanych znaków (tak jakby to znaczyło plus nieskończoność). Więc
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
 znaczy: wczytuj i ignoruj znaki aż do znaku
'\n'
 włącznie.

W przypadku kodu z pierwszego postu musiałeś wpisać liczbę dwa razy, bo pierwsza z nich była zjadana przez
cin.ignore( 1000, '\n' );
, a dopiero druga była wczytywana przez
cin >> liczba;
P-90328
1 2 « 3 »
Poprzednia strona Strona 3 z 3