Problema assegnamento vettore di puntatori a struct

di il
9 risposte

Problema assegnamento vettore di puntatori a struct

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.

9 Risposte

  • Re: Problema assegnamento vettore di puntatori a struct

    Se fa una solo printf allora il problema è in

    *ord_data=citta.pigs;

    Sei sicuro sia corretto?
  • Re: Problema assegnamento vettore di puntatori a struct

    Intendi quell'assegnamento? io credo di no anche se dal punto di vista estetico mi sembrava credibile.I dati ho provato a stamparli e sono attribuiti correttamente,penso che sia proprio quel particolare assegnamento che manda tutto a farsi friggere,tralasciando comunque che ho dovuto passare gli indirizzi alla funzione in un modo stranissimo(stranissimo paragonandomi al libro di testo),ovvero:

    ordina_data(BG.num_maialini,ord_data,BG);//chiamata

    void ordina_data(int num_maialini,Maialino *ord_data[N],Allevamento &citta)

    notate che BG l'ho scritto così com'è,mentre il testo dice di scriverlo con l'asterisco già qui la cosa mi preoccupa,però nelle altre funzioni sembra funzionare...
  • Re: Problema assegnamento vettore di puntatori a struct

    E' difficile seguirti anche in

    "forum.html.it/forum/showthread.php?threadid=2899434"

    ...
  • Re: Problema assegnamento vettore di puntatori a struct

    Purtroppo una risposta mi serve,se da una parte non risponde nessuno devo provare altrove altrimenti son fregato
  • Re: Problema assegnamento vettore di puntatori a struct

    Il fatto è che finché ti rispondono da un lato non dovresti scrivere dall'altro ...

    A parte il fatto che questa sezione è dedicata a C# .NET ... non a C++ ... un bel po' di confusione ...
  • Re: Problema assegnamento vettore di puntatori a struct

    C++? il c++ non è quello con le cin cout e via dicendo?purtroppo notando un salto di 30 visite ho capito che nessuno avrebbe mai risposto
  • Re: Problema assegnamento vettore di puntatori a struct

    Satiro ha scritto:


    c++? il c++ non è quello con le cin cout e via dicendo?purtroppo notando un salto di 30 visite ho capito che nessuno avrebbe mai risposto
    C/C++ è trattato in altra sezione ... qui si tratta il C#
  • Re: Problema assegnamento vettore di puntatori a struct

    Spostato, stai più attento la prossima volta
  • Re: Problema assegnamento vettore di puntatori a struct

    Grazie mille,scusate ma allora ho completamente frainteso quello che ho postato io è C ma non C# giusto?XD
Devi accedere o registrarti per scrivere nel forum
9 risposte