La traccia dell'esercizio è questa:
Dato un file contenente un elenco di nomi di calciatori (con ripetizioni) stampare (senza ripetizioni) a video e su file i nomi che si ripetono con occorrenza maggiore di 2 (si utilizzi un array di record).

Il mio lavoro:
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string.h>
using namespace std;
#define max 10
#define m 10


typedef struct {
char nome[m];
char cognome[m];
}calciatore;


typedef calciatore elenco[max];


bool Controllo_File(){
bool presente=false;
fstream file;
file.open("nomi.txt", ios::in);
if(file) presente=true;
file.close();
return presente;
}
void stampaArray(const elenco e, int& r){
cout<<e[r].nome<<" "<<e[r].cognome<<endl;
}
void letturaNomiCalciatori(elenco E){
int i=0;
fstream f;
f.open("nomi.txt", ios::in);
while(!f.eof())
{
f>>E[i].nome;
f>>E[i].cognome;
i++;
stampaArray(E, i);
}
f.close();

}
int main(){


elenco e;

if(Controllo_File){
letturaNomiCalciatori(e);


}
else{
cout<<"File non trovato!";
}


system("PAUSE");
return 0;
}

Il mio problema: Lo so che con la funzione stampaArray stampo tutti gli struct del file, ma il mio problema è un altro, cioè quando avvio il programma a video non mi compaiono i nomi dei calciatori ma bensì caratteri indecifrabili. Ora ho tentanto in vari modi ma niente, secondo voi qual'è il mio errore?
Grazie in anticipo!