Array di struct

di il
2 risposte

Array di struct

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



2 Risposte

  • Re: Array di struct

    Non so se la questione è solo quella o se ce ne sono altre, però in nazPrescelta() usi la variabile i senza inizializzarla, il che di solito porta dei bei problemi.

    Inoltre, in caricamento() usi due volte scanf() con un %s nel formato, passando come parametro puntatori a doppia indirezione anziché a indirezione singola.

    Io ho visto queste due cose.
  • Re: Array di struct

    A parte che la funzione caricamento l'hai chiamata carimento, un grosso problema è in

    naz[i+1]...

    dato che a fine ciclo vai oltre la fine del buffer
Devi accedere o registrarti per scrivere nel forum
2 risposte