Rozdział 26 - problem z getline()
Ostatnio zmodyfikowano 2014-08-19 19:46
giedoka Temat założony przez niniejszego użytkownika |
Rozdział 26 - problem z getline() » 2014-08-19 18:33:50 Siemanko, Mam problem z drugim zadaniem z rozdziału 26 (Zmodyfikuj program z pierwszego zadania tak, aby używał do wczytywania tekstu funkcji std::getline.). Natomiast zadanie, które należy zmodyfikować brzmi następująco: Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób. Funkcja główna programu ma mieć następującą postać: int main() { std::string imie[ 2 ]; std::string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
Oto mój kod: #include <iostream> #include <string>
using namespace std;
void wczytajOsobe( string & imieNazwisko, int & wiek ) { cout << "Podaj imie i naziwsko: "; getline( cin, imieNazwisko ); cout << "Podaj wiek: "; while( !( cin >> wiek ) ) { cout << "Bledne dane. Podaj jeszcze raz." << endl; cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } }
void wypiszOsobe( string imieNazwisko, int wiek ) { cout << "Imie i nazwisko: " << imieNazwisko << endl; cout << "Wiek: " << wiek << endl; }
int main() { 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; }
Mój problem wygląda tak, że funkcja getline() tak jakby nie działa, bo dzieje się coś takiego: Podaj imie i naziwsko: Bartosz Gronkiewicz Podaj wiek: 21 Podaj imie i naziwsko: Podaj wiek: 43 Imie i nazwisko: Bartosz Gronkiewicz Wiek: 21 Imie i nazwisko: Wiek: 43 Bardzo proszę o pomoc... |
|
Monika90 |
» 2014-08-19 18:56:14 to typowe kiedy się używa operatora >> i getline. Po udanym cin >> wiek powinieneś wywołać cin.ignore( numeric_limits < streamsize >::max(), '\n' ); A może lepiej używać tylko getline? |
|
giedoka Temat założony przez niniejszego użytkownika |
» 2014-08-19 19:46:48 Zrobiłem tak jak mówiłaś, czyli po udanym wczytaniu wieku wywołałem cin.ignore() i jest ok ;) dzięki za pomoc! |
|
« 1 » |