Salve ragazzi, confesso che questa discussione già l'ho trovata nel vostro forum, mi è stata d'aiuto ma non so perchè non mi trovo!

In pratica il punto è questo:
Si progetti un programma composto da tre funzioni:
-una funzione LEGGI che deve leggere il riempimento e gli elementi del vettore di strutture VS

-una funzione SEPARA che riceve in ingresso VS e riemp e restituisce come parametri di uscita due vettori di interi, VM e VF:il primo vettore dovrà contenere le età delle persone di sesso maschile ed il secondo le età delle persone di sesso femminile.

-una funzione STAMPA che serve a stampare i vettori VM e VF. Quest'ultima funzione dovrà anche stampare un opportuno messaggio nel caso in cui uno dei due vettori sia vuoto.
ES.
INPUT:
riemp = 5
VS = 20 M
25 M
23 F
18 M
33 F

OUTPUT:
VM = 20 25 18
VF = 23 33
---------------
Io ho scritto questo:
codice:
//    lib.h
const int maxdim=20;
typedef int vettore [maxdim];
struct persona{
       int eta;
       char sesso;
};

typedef persona info[maxdim];

void leggi_struct(info, int&);
void stampa_struct(const info, int);
void separa( info, int, vettore, vettore, int&, int&);
void stampa_vett(vettore, int, vettore, int);
codice:
//     lib.cpp

#include <cstdlib>
#include <iostream>
#include "lib.h"
using namespace std;

void leggi_struct(info vs, int&r_vs){
     int i;

     for(i=0;i<r_vs; i++){
        cout<<"Inserire l'eta' : ";
        cin>>vs[i].eta;
        cout<<"Ora inserire il sesso: ";
        cin>>vs[i].sesso;
        }
     
     
}    

void stampa_struct(const info vs, int r_vs){
     int i;
     cout<<"\nStampa della struttura inserita: \n";
     for(i=0;i<r_vs;i++){
                         cout<<vs[i].eta<<' '<<vs[i].sesso<<'\n';
                         cout<<"\n";
     }
}   

void separa(info vs, int r_vs, vettore vm, vettore vf, int&r_vm, int&r_vf){
     int i,j;
     r_vm=0;
     r_vf=0;
     for(i=0;i<r_vs;i++){
         if(vs[i].sesso =='m' || vs[i].sesso=='M'){
                 vm[r_vm]=vs[i].eta;
                 r_vm++;
                 }
                 else{
                      if(vs[i].sesso =='f' || vs[i].sesso=='F'){
                         vm[r_vf]=vs[i].eta;
                         r_vf++;
                         }
                      }            
     }     
}

void stampa_vett(vettore vm, int r_vm, vettore vf, int r_vf){
     int i,j;
     if(r_vm==0 || r_vf==0)
        cout<<"\nUno dei due vettori e' vuoto, non ha elementi...\n";
     
     cout<<"\nGli elementi del vettore vm sono: \n";
     for(i=0;i<r_vm;i++)
     cout<<vm[r_vm]<<' ';
     
     cout<<"\nGli elementi del vettore vf sono: \n";
     for(j=0;j<r_vf;j++)
     cout<<vf[r_vf]<<' ';
     cout<<"\n\n";
}
codice:
//      main.cpp
#include <cstdlib>
#include <iostream>
#include "lib.h"
using namespace std;

int main()
{
    info vs;
    int r_vs;
    vettore vm;
    vettore vf;
    int r_vm;
    int r_vf;
    
    cout<<"Inserire il numero di elementi da caratterizzare: ";
    cin>>r_vs;
    leggi_struct(vs, r_vs);
    stampa_struct(vs, r_vs);
    
    separa(vs, r_vs, vm, vf, r_vm, r_vf);
    stampa_vett(vm, r_vm, vf, r_vf);
    system("PAUSE");
    return EXIT_SUCCESS;
}
Ecco invece l'output dopo aver digitato i vari valori:
codice:
Inserire il numero di elementi da caratterizzare: 3
Inserire l'eta' : 13
Ora inserire il sesso: m
Inserire l'eta' : 35
Ora inserire il sesso: f
Inserire l'eta' : 39
Ora inserire il sesso: m

Stampa della struttura inserita:
13 m

35 f

39 m


Gli elementi del vettore vm sono:
4072592 4072592
Gli elementi del vettore vf sono:
-2142260006

Premere un tasto per continuare . . .
Penso che il problema risiedi nella funzione separa, perchè alla funzione stampa_struct i valori arrivano bene, per questo l'ho scritta
Potete aiutarmi a capire perchè escono quei valori?

Grazie in anticipo!!