Poprawne czyszczenie strumienia wejścia.
Ostatnio zmodyfikowano 2013-10-02 16:15
Lanc Temat założony przez niniejszego użytkownika |
Poprawne czyszczenie strumienia wejścia. » 2013-10-01 23:34:39 Mam problem z czyszczeniem strumienia wejścia.Program ma na celu wprowadzić do tablicy 3 zmienne int,po uprzednim upewnieniu się,że są poprawne. #include <iostream>
using namespace std;
int wczytaj() { int a[ 3 ]; int i = 0; int b = 0; do { cin.sync(); cin.clear(); cin >> b; if( cin.good() ) { a[ i ] = b; i++; } } while( i < 3 ); }
int main() { wczytaj(); }
#include <iostream>
using namespace std;
int wczytaj() { int a[ 3 ]; int i = 0; int b = 0; do { cin >> b; if( cin.good() ) { a[ i ] = b; i++; } cin.sync(); cin.clear(); } while( i < 3 ); }
int main() { wczytaj(); }
Te dwa kody blokują się po wpisaniu błędnych danych. Działa kod poniżej,w którym zostało użyte czyszczenie dwukrotnie.Dlaczego? #include <iostream>
using namespace std;
int wczytaj() { int a[ 3 ]; int i = 0; int b = 0; do { cin.sync(); cin.clear(); cin >> b; if( cin.good() ) { a[ i ] = b; i++; } cin.sync(); cin.clear(); } while( i < 3 ); }
int main() { wczytaj(); }
|
|
Monika90 |
» 2013-10-02 00:32:20 Wersja druga jest dobra, tylko clear musi być przed sync. A poza tym zamiast sync używaj std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
Zapomniałeś też o instrukcji return w funkcji wczytaj. |
|
Lanc Temat założony przez niniejszego użytkownika |
» 2013-10-02 13:40:16 Ok, dziękuję za odpowiedź, ale nadal chciałbym się dowiedzieć dlaczego pierwszy sposób jest błędny? Czy jest to związane z funkcjonowaniem pętli? Oraz dlaczego musi być odpowiednią kolejność czyszczenia, skoro występuje niezależnie po sobie? |
|
Monika90 |
» 2013-10-02 14:50:29 Jeżeli strumień jest w stanie fail to sync nic nie robi, (tak jak i większość operacji na strumieniu). Dalatego najpierw musisz zmienić stan strumienia na good, np. za pomocą clear().
|
|
Lanc Temat założony przez niniejszego użytkownika |
» 2013-10-02 16:15:40 Dziękuję za pomoc.Zamykam. |
|
« 1 » |