Dziwne zachowanie przy wprowadzaniu danych
Ostatnio zmodyfikowano 2016-02-16 11:03
krzychu_ten Temat założony przez niniejszego użytkownika |
Dziwne zachowanie przy wprowadzaniu danych » 2016-02-16 09:45:19 Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób. Zmodyfikuj program z pierwszego zadania tak, aby używał do wczytywania tekstu funkcji std::getline. #include <iostream> #include <string>
void wczytajOsobe( std::string & imie_nazwisko, int & wiek ) { std::cout << "Podaj imie i nazwisko: "; std::getline( std::cin, imie_nazwisko ); std::cin.sync(); std::cout << "Podaj wiek: "; std::cin >> wiek; bool x = std::cin.fail(); if( x == true ) do { std::cout << "To nie liczba, podaj nowa - "; std::cin.clear(); std::cin.sync(); std::cin >> wiek; x = std::cin.fail(); } while( x == true ); }
void wypiszOsobe( std::string & imie_nazwisko, int & wiek ) { int i; std::cout << "Twoje imie i nazwisko: " << imie_nazwisko << std::endl; std::cout << "Twoj wiek: " << wiek << std::endl; }
int main() { std::string imie_nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) { std::cout << std::endl << "Osoba " << i + 1 << std::endl << std::endl; wczytajOsobe( imie_nazwisko[ i ], wiek[ i ] ); } std::cout << std::endl << "Wpisane osoby:" << std::endl; for( int i = 0; i < 2; i++ ) { std::cout << std::endl << "Osoba " << i + 1 << std::endl << std::endl; wypiszOsobe( imie_nazwisko[ i ], wiek[ i ] ); } return 0; }
Program bez problemu prosi o wprowadzenie danych pierwszej osoby, ale przy drugiej nie daje możliwości wpisania imie_nazwisko. Proszę o wsparcie. |
|
carlosmay |
» 2016-02-16 11:03:47 Operator >> po wprowadzeniu danych zostawia w buforze strumienia znak '\n' , na który reaguje std::getline. Pobiera go ze strumienia i kończy działanie zostawiając pusty string. Czyszczenie strumienia po wczytaniu wieku rozwiąże problem lub std::cin >> wiek; std::cin.get();
|
|
« 1 » |