Ciao a tutti!,il titolo è un pò lungo ma esprime grosso modo il mio problema,in pratica devo realizzare un programma che,dato un certo allevamento di..maiali... prenda le informazioni dei maialini che vi risiedono e dapprima stampi le loro informazioni così come sono,poi in ordine di data di nascita,peso,nome ecc.. Vi mostro solo la funzione per ordinare le date che è quella un pò più articolata secondo me,non metto tutto il codice solo quello della funzione interessata(più una di appoggio)
#define N 100
typedef struct{
int giorno;
int mese;
int anno;
}Data;
typedef struct{
char nome[20];
float peso;
Data annonascita;
float popolarita;
}Maialino;
typedef struct{
Maialino pigs[N];
int num_maialini;
}Allevamento;
/*->CONFRONTO INTERI<-*/
int confronta(int a,int b)
{
printf("ciao c");
if(a>b)
{
printf("bau");
return 1;
}
if(a<b)
{
return -1;
}
if(a==b)
{
return 0;
}
}
/*->ORDINA DATE<-*/
void ordina_data(int num_maialini,Maialino *ord_data[N],Allevamento &citta)
{
int i,j,result;
for(i=0;i<num_maialini-1;i++)
{
for(j=0;j=num_maialini-1;j++)
{
result=confronta(citta.pigs[i].annonascita.anno,citta.pigs[j+1].annonascita.anno);
switch(result){
case 1:
*ord_data[i]=citta.pigs[j+1];
break;
case -1:
printf("ciao e");
*ord_data[i]=citta.pigs[i];
printf("ciao f");
break;
case 0:
result=confronta(citta.pigs[i].annonascita.mese,citta.pigs[j+1].annonascita.mese);
break;
switch(result){
case 1:
*ord_data[i]=citta.pigs[j+1];
break;
case -1:
*ord_data[i]=citta.pigs[i];
break;
case 0:
result=confronta(citta.pigs[i].annonascita.giorno,citta.pigs[j+1].annonascita.giorno);
break;
switch(result){
case 1:
*ord_data[i]=citta.pigs[j+1];
break;
case -1:
*ord_data[i]=citta.pigs[i];
break;
case 0:
break;
}
}
}
}
}
}
Il problema principale è nella funzione ordina_data appunto,si ferma al primo switch tra "ciao e" e "ciao f" stampa cioè solo "ciao e" dopo di che esce il messaggio di windows "il programma ha smesso di funzionare"
La logica dello switch è abbastanza semplice, gli si mandano i primi due valori,cerca il più piccolo e *ord_data[] dovrebbe puntare al più piccolo, se l'anno di nascita è lo stesso allora confronta i mesi e così via.....
Grazie mille,spero non sia troppo incasinata come scrittura.