Scusate non saprei dare un titolo più appropriato alla discussione.

Ho in problema con la funzione che vi posto qui in basso (void inserisciDati(batteria[]), precisamente).

codice:
codice:
#include <stdio.h>
#include <string.h>
#define V 20
#define D 10
#define O 8

typedef struct {
    char nome [V];
    char cognome [V];
    int eta;
    float tempo;
    
}atleta;

typedef struct {
    atleta atleta[O];
    char sesso;
}batteria;

void inserisciDati(batteria[]);
float mediaMaschile(batteria[]);
int numeroFemmine(batteria[],float);


int main() {
    batteria b[D];
    float media;
    int numf;
    
    printf("\n\nREGISTRAZIONI ATLETI:\n");
    inserisciDati(b);
    printf("\nFine Funzione\n");
    media=mediaMaschile(b);
    numf=numeroFemmine(b,media);
    printf("La media Maschile è di %f, le femmine che hanno fatto un tempo migliore sono %d",media,numf);
    
            
        
}    

void inserisciDati(batteria b[]){
    int i,j;
    
    for (i=0;i<D;i++){
        
        for(j=0;j<O && j!=-1;){
            if (j>0){
                while (getchar() != '\n');
                
            }
            printf("\nInserisci il nome dell'atleta: ");
            fgets(b[i].atleta[j].nome,V,stdin);
            
            if (strcmp(b[i].atleta[j].nome,"\n")==0){
                printf("\nFine Inserimento Batteria.");
                j=-1;
            }
            
            else{
                printf("Inserisci il cognome dell'atleta: ");
                fgets(b[i].atleta[j].cognome,V,stdin);
                printf("Inserisci l'età dell atleta:");
                scanf("%d",&b[i].atleta[j].eta);
                if (j==0){
                    printf("Inserisci il sesso dell'atleta: (""m"" o ""f"")");
                    scanf(" %c",&b[i].sesso);
                }
                printf("Tempo registrato:");
                scanf("%f",&b[i].atleta[j].tempo);
                j++;
            }
        }
        
    }
    printf("\nFine Ciclo");
    return;
}

float mediaMaschile(batteria b[]){
    int i,j,count=0;
    float tot=0;
    float media;
    for (i=0;i<D;i++){
        if (b[i].sesso=='m'){
            for (j=0;j<O && b[i].atleta[j].nome!=NULL;){
                tot=tot+b[i].atleta[j].tempo;
                count++;
            }
        }
    }
    media=tot/(float)count;
    return media;
}

int numeroFemmine(batteria b[],float media){
    
    int i,j,num=0;
    for (i=0;i<D;i++){
        if (b[i].sesso=='f'){
            for (j=0;j<O && b[i].atleta[j].nome!=NULL;){
                if (b[i].atleta[j].tempo<media){
                    num++;
                }
            }
        }
    }
    return num;
}

Il problema è che il programma non da nè errori ne warning, ma alla fine del ciclo non ritorna nel main() e non mi compare più nulla sul terminale, ho provato di tutto ma non sono riuscito ad arrivare ad una conclusione.
Ho già provato a piazzare fflush(stdin) e fflush(stdout) pensando fosse un problema di buffer.