[c++] Przeładowany operator>> - zabezpieczanie przed niepoprawnymi danymi
Ostatnio zmodyfikowano 2015-09-29 08:51
carlosmay Temat założony przez niniejszego użytkownika |
[c++] Przeładowany operator>> - zabezpieczanie przed niepoprawnymi danymi » 2015-09-29 01:12:22 class Foo { int m_num1; int m_num2; public: std::istream & operator >>( std::istream & is, Foo & f ) { std::cout << "Podaj dwie liczby: " << std::endl; return is >> f.m_num1 >> f.m_num2; }
Nie wiem jak zabezpieczyć wczytywanie z klawiatury, aby wczytywało tylko int'y. Napisałem taką funkcję, która wczytuje tylko int'y int GetNum() { using std::cin; using std::cout; int a; char ch; do { while( !( cin >> a ) ) { cin.clear(); cin.ignore( 100, '\n' ); cout << "Jeszce raz: "; } cin.get( ch ); if( ch == '.' ) { while( ch != '\n' ) cin.get( ch ); cout << "Nie calkowita: "; ch = 'a'; continue; } if( ch != '\n' ) { while( ch != '\n' ) cin.get( ch ); cout << "Sa litery: "; ch = 'a'; continue; } } while( cin.fail() || ch == 'a' ); return a; }
w main() do zwykłej zmiennej jest ok. Czy można wczytywać dane z pomocą np. takiej funkcji, do składowych klasy za pomocą przeładowanego operatora>> is >> f.m_num1 >> f.m_num2; ? |
|
mateczek |
jeśli już to » 2015-09-29 06:16:44 class Foo { int m_num1; int m_num2; public: friend std::istream & operator >>( std::istream & is, Foo & f ) } std::istream & operator >>( std::istream & is, Foo & f ) { std::cout << "Podaj dwie liczby: " << std::endl; f.m_num1 = getnum(); f.m_num1 = getnum(); return is; }
|
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-09-29 08:51:06 Nie wiedziałem, że tak można. Myślałem, że to działa jak cin >> a >> b; , nawet nie próbowałem osobno wczytywać. is >>( f.m_num1 = GetNum() ) >>( f.m_num2 = GetNum() ); Tak kombinowałem, ale wczytywało każdą liczbę dwa razy. jest, nie załapała się na kopiowanie. Dzięki @mateczek. |
|
« 1 » |