Funkcja w petli iterujaca po tablicy

0

Witam. Zacząłem uczyć się C++ i mam takie zadanie:

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;
}

W programie do wczytywania tekstu użyj std::cin.

To napisałem:

void wczytajOsobe(string imie[], string nazwisko[], int wiek[]){
int i=0;
cout << "Podaj imie,  nazwisko oraz wiek"<< endl;
do{
cin >> imie[i];
cin >> nazwisko[i];
cin >> wiek[i];
}while(???);
}
 

I nie mam pojęcia jak przekazać wartość i z for'a, w którym wywoływana jest funkcja do samej funkcji. Może ktoś pomóc? Sprawa wygląda na banalną, ale niestety utknąłem z tym na dobre...

0

Dobra wersja trzecia chyba już ma ładniejsze wcięcia:

#include <iostream>
 
using namespace std; // nie ma syfu z tymi prefiksami "std::"
 
const int MX = 2;
 
string imie[ MX ];
string nazwisko[ MX ];
int wiek[ MX ];
 
 
bool czyLiczba(string &pom)
{
        for(int i=0;i<pom.size();i++)
                if(!(pom[i]>='0' && pom[i]<='9'))
                        return false;
        return true;
}
 
int toInt(string &pom)
{
        int w = 0;
        for(int i=0;i<pom.size();i++)
                w=w*10+pom[i]-'0';
        return w;
}
 
void wczytajOsobe ( string & i, string &n, int &w)
{
        string pom;
        cout<<"Wpisz imie: ";
        cin>>i;
        cout<<"Wpisz nazwisko: ";
        cin>>n;
        cout<<"Wpisz wiek: ";
        cin>>pom;
        
        while(!czyLiczba(pom))
        {
                cout<<"Wpisz wiek: ";
                cin>>pom;
        }
        w = toInt(pom);
}
 
void wypiszOsobe ( string &i, string &n, int &w)
{
        cout<<"Imie: "<<i<<"\n";
        cout<<"Nazwisko: "<<n<<"\n";
        cout<<"Wiek: "<<w<<"\n";
        cout<<"\n";
}
 
int main()
{
        ios::sync_with_stdio(false); // szybciej wczytuje
 
        
        for( int i = 0; i < MX; i++ )
                wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
 
        for( int i = 0; i < MX; i++ )   
                wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
 
return 0;
} 
0

A przecież cin nie wpisuje tylko do stringów. Więc po co czytać najpierw do stringa, później sprawdzać czy tam nie ma liter i konwertować do inta? Nie lepiej zrobić tak:

int w = -1;
cin>>w;

I jeśli w zmiennej 'w' dalej pozostaje -1, to oznacza że ktoś cos źle wpisał. Co prawda jak ktoś wpisze np 42U5, to do zmiennej wpisze 42, ale to już jak chcesz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1