Rozdział 2, lekcja 1 (do...while)
Ostatnio zmodyfikowano 2016-01-05 09:20
reg_edit Temat założony przez niniejszego użytkownika |
Rozdział 2, lekcja 1 (do...while) » 2016-01-04 21:33:27 #include <iostream>
using namespace std;
int main() { int liczba; do { cout << "Podaj liczbe: "; cin >> liczba; } while( cin.fail() ); cout << "wpisana liczba: " << liczba; return 0; }
Nie mogę znaleźć błędu w tym programie. Gdy wprowadzę liczbę 'int' program działa poprawnie, jednak, gdy wpiszę inny znak niż zadeklarowany 'int' to program zaczyna bez przerwy drukować napis "Podaj liczbę: ". Używam Linuxa. |
|
mateczek |
» 2016-01-04 22:04:00 |
|
carlosmay |
» 2016-01-04 22:20:09 std::cin.ignore() służy do czyszczenia strumienia plus metoda *.clear() do skasowania flagi błędu. |
|
reg_edit Temat założony przez niniejszego użytkownika |
» 2016-01-04 22:37:16 { int liczba; bool test; do { cout << "Podaj liczbe: "; cin >> liczba; test = cin.fail(); cin.clear(); cin.ignore( 1000, '\n' ); } while( test ); cout << "wpisana liczba: " << liczba; return 0; } Pomogło zastosowanie tego kodu. Nie mogę jednak zrozumieć działania cin.ignore( 1000, '\n' ); . Ignoruje on do 1000 znaków lub do napotkania znaku nowej linii, ale jak to wygląda w praktyce? |
|
carlosmay |
» 2016-01-05 09:20:36 Ignoruje on do 1000 znaków lub do napotkania znaku nowej linii, ale jak to wygląda w praktyce? |
Właśnie tak to wygląda w praktyce. cin.ignore( numeric_limits < streamsize >::max(), '\n' );
Częściej stosuje się taki zapis. Metoda nie jest wtedy zależna od stałej wartości. Poza tym znak też można zmienić np. na spację. |
|
« 1 » |