Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 26 - problem z getline()

Ostatnio zmodyfikowano 2014-08-19 19:46
Autor Wiadomość
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ć:
C/C++
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:
C/C++
#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...
P-115745
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?
P-115747
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!
P-115752
« 1 »
  Strona 1 z 1