Rozdział 26 zadanie 2
Ostatnio zmodyfikowano 2016-01-28 00:29
wirusomaniak Temat założony przez niniejszego użytkownika |
Rozdział 26 zadanie 2 » 2016-01-27 22:11:14 Mam problem z tym programem gdy wczytuje pierwszą osobę jest ok lecz przy wczytywaniu drugiej pomija imię i nazwisko i przechodzi od razu do wczytywania wieku. #include <iostream> #include <string> #include <cstdlib> using namespace std; int wczytajOsobe( string & imieNazwisko, int & wiek ) { cout << "Wprowadz imie i nazwisko: "; getline( cin, imieNazwisko ); do { cin.clear(); cin.sync(); cout << "Wprowadz wiek: "; cin >> wiek; } while( cin.fail() ); } int wypiszOsobe( string imieNazwisko, int wiek ) { cout << "imie i nazwisko: " << imieNazwisko << "\nwiek: " << wiek << endl; } int main() { std::string imieNazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imieNazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imieNazwisko[ i ], wiek[ i ] ); return 0; } |
|
carlosmay |
» 2016-01-28 00:11:54 do { cin.clear(); cin.sync(); cout << "Wprowadz wiek: "; cin >> wiek; } while( cin.fail() ); |
przed std::getline() też oczyszczaj strumień lub pobierz znak nowej linii std::cin.get(). Lepszym rozwiązanie jest stosowanie std::cin.ignore() niż std::cin.sync() . |
|
wirusomaniak Temat założony przez niniejszego użytkownika |
» 2016-01-28 00:29:44 Dziękuję bardzo sam raczej bym na to nie wpadł. Nie wiedziałem, że wywołanie cin pozostawia znak nowej linii. Odnosząc się do podanych przez Ciebie możliwości rozwiązania mojego problemu raczej wybiorę pierwszy sposób ponieważ do zadań domowych chcę używać tylko i wyłącznie wiedzy z kursu. |
|
« 1 » |