Buonasera, ho un problema nel trovare il valore minimo in uno array di struct.
Vi spiego meglio:
Devo trovare la nazionale che ha la somma dei migliori tempi di ogni suo atleta più bassa.
Una volta trovato questo dato, devo stampare la squadra.
Ho provato a farlo in questo modo , ma ad un certo punto(quando parte questa funzione), il programma smette di funzionare.
#include <stdio.h>
#include <stdlib.h>
#define maxA 30
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct{
char cognome[30];
float miglTemp;
}t_atleta;
typedef struct{
char nome_naz[30];
t_atleta vAtleti[maxA];
float somTempi;
}t_nazione;
//prototipi di funzioni/procedure
void carimento(t_nazione naz[], int x, int y );
void nazPrescelta(t_nazione naz[], int x, int y);
//DEBUG
void stampatabella(t_nazione naz[], int x, int y);
//inizio del programma
int main(int argc, char *argv[]) {
int nNaz, nAtl;
do{
printf("Quante nazioni parteciperanno? (max 100)----->");
scanf("%d", &nNaz);
}while(nNaz<=0 || nNaz>100);
printf("\n");
do{
printf("Quanti atleti parteciperanno per nazione?-----> ");
scanf("%d", &nAtl);
}while(nAtl<=0 || nAtl>30);
printf("\n");
t_nazione all_naz[nNaz]; //CREO ARRAY DI NAZIONI
carimento(all_naz, nNaz,nAtl);
stampatabella(all_naz, nNaz, nAtl);
nazPrescelta(all_naz, nNaz, nAtl);
return 0;
}
//DEFINIZIONE DELLE PROCEDURE/FUNZIONI
void carimento(t_nazione naz[], int x, int y ){ //x è la dimensione dell'array nazioni, y è la dimensione dell' array vAtleti
for(int i=0; i<x; i++){
printf("Inserisci nome della nazionale %d: ", i+1);
scanf("%s", &naz[i].nome_naz);
for(int j=0; j<y; j++){
printf("Inserisci il cognome dell'atleta %d: ",j+1);
scanf("%s", &naz[i].vAtleti[j].cognome);
printf("Inserisci il miglior tempo dell'atleta %d (minuti.secondi): ", j+1);
scanf("%f", &naz[i].vAtleti[j].miglTemp);
printf("\n");
}//fine secondo for
} //fine primo for
}//fine procedura
void stampatabella(t_nazione naz[], int x, int y){ //per debug
for(int i=0; i<x; i++){
printf("%s \t\t", naz[i].nome_naz);
for(int j=0; j<y; j++){
printf("%s \t\t\n", naz[i].vAtleti[j].cognome);
printf("%.2f \t\t", naz[i].vAtleti[j].miglTemp);
}printf("\n");//fine secondo for
} //fine primo for
}//fine procedura
void nazPrescelta(t_nazione naz[], int x, int y){
int i,j;
float min;
for( j=0; j<y; j++){
naz[i].somTempi=0; //inizializzo a 0
naz[i].somTempi= naz[i].somTempi + naz[i].vAtleti[j].miglTemp; //PER OGNI SQUADRA CALCOLO LA SOMMA DEI TEMPI
}
for(i=0; i<x; i++){
if(naz[i].somTempi < naz[i+1].somTempi)
printf("la nazionale che ospiterà i prossimi campionati sara': %s ", naz[i].nome_naz );
else printf("la nazionale che ospiterà i prossimi campionati sara': %s ", naz[i+1].nome_naz );
}
}