[Lekcja 15] cin.sync() vs cin.ignore(numeric_limits <streamsize>::max(), '\n')
Ostatnio zmodyfikowano 2013-08-15 00:43
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. |
|
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? |
|
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; |
|
1 2 « 3 » |