Witam,
Polecenie do 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ć:
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 ] );
for( int i = 0; i < 2; i++ )
wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
return 0;
}
-
Zadbaj o bezpieczeństwo wprowadzonych danych, tj. w przypadku błędnego wieku (np. wprowadzonego tekstu) program ma ponawiać żądanie aż do skutku. |
Problem jest taki że "zabezpieczenie" "działa" ale nie tak jak należy. A mianowicie :
Podaje imie >> Jan
Podaje nazwisko > > Kowalski
Podaje cyfre >> jeden
Pętla się uruchamia i pyta jeszcze raz o cyfre
Podaje cyfre >> 1
Na ekran wypisuje:
Imie: Jan
Nazwisko : Jan
Wiek : jeden
Dlaczego tak jest ?
Oto mój kod:
#include <iostream>
#include <string>
using namespace std;
void wczytajOsobe (string & imie, string & nazwisko, int & wiek)
{
cout << "Podaj imie: "; cin >> imie;
cout << "Podaj nazwisko: "; cin >> nazwisko;
int wiek_pomocnicza;
do
{
cin.clear();
cin.sync();
cout << "Podaj wiek ( cyfra ) !!! " << endl;
cin >> wiek;
wiek_pomocnicza = cin.good();
} while (wiek_pomocnicza == false);
}
void wypiszOsobe(string & imie, string & nazwisko, int & wiek)
{
cout << "Imie: " << imie << endl;
cout << "Nazwisko: " << imie << endl;
cout << "Wiek: " << wiek << endl;
cout << 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 ] );
for( int i = 0; i < 2; i++ )
wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
return 0;
}