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

Lekcja 26 wczytywanie danych

Ostatnio zmodyfikowano 2014-03-07 23:14
Autor Wiadomość
Kluczyk
Temat założony przez niniejszego użytkownika
Lekcja 26 wczytywanie danych
» 2014-03-05 21:13:09
Próbuję wykonać pracę domową z lekcji 26.
Treść zadania: Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób. Funkcja główna programu ma mieć następującą postać: (poniżej umieściłem cały kod swojego programu, w którym funkcja main() nie została zmieniona).

Wydawało mi się, że już wszystko działa, lecz program przy wczytywaniu danych drugiej osoby, pomija imię.
Proszę o jakieś wskazówki/wyjaśnienia.

Kod:
C/C++
#include <cstdlib>
#include <iostream>

using namespace std;

void wczytajOsobe( string & imie, string & nazwisko, int & wiek, int i )
{
   
    cout << "Podaj dane " << i + 1 << " osoby." << endl;
    cout << "Podaj imie: ";
    getline( cin, imie );
    cin.clear();
    cin.sync();
    cout << "Podaj nazwisko: ";
    getline( cin, nazwisko );
    cin.clear();
    cin.sync();
    do
    {
        cin.clear();
        cin.sync();
        cout << "Podaj wiek: ";
        cin >> wiek;
    }
    while( cin.fail() == 1 );
   
}

void wypiszOsobe( string imie, string nazwisko, int wiek, int i )
{
    cout << endl << "Dane " << i + 1 << " osoby." << endl;
    cout << "Imie: " << imie << endl;
    cout << "Nazwiko: " << nazwisko << endl;
    cout << "Wiek: " << wiek << endl;
}

int main()
{
    string imie[ 2 ];
    string nazwisko[ 2 ];
    int wiek[ 2 ];
    for( int i = 0; i < 2; i++ )
         wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i );
   
    for( int i = 0; i < 2; i++ )
         wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i );
   
    cout << endl;
    system( "PAUSE" );
    return 0;
}
P-105700
leon_w
» 2014-03-05 22:40:30
W buforze zostaje znak nowej lini, pozostałość po wczytywaniu funckją cin. Wyczyść bufor po cin i będzie grało. Możesz użyć do tego get.
P-105708
Kluczyk
Temat założony przez niniejszego użytkownika
» 2014-03-05 23:50:58
Albo robię coś źle, albo nie dokładnie zrozumiałem.
Możesz proszę napisać linijkę i wskazać gdzie dokładnie ją wstawić?
P-105716
leon_w
» 2014-03-06 15:00:14
Wywołujesz funkcję wczytajosobe(), wszędzie ładnie czyścisz bufor i flagi błędów, ale nie po ostatnim wprowadzaniu ( wiek ).
Wyczyść bufor (cin.sync()) albo po wprowadzeniu wieku, albo na początku, przed wprowadzeniem imienia.
P-105736
Kluczyk
Temat założony przez niniejszego użytkownika
» 2014-03-07 23:14:54
Faktycznie - działa, dziękuję za pomoc.
Nie wiem czemu to przeoczyłem.
P-105821
« 1 »
  Strona 1 z 1