Problema con array di liste

di il
7 risposte

Problema con array di liste

Ciao a tutti ragazzi,
vado subito al sodo! ho dichiarato delle struct di questo tipo:
struct farmaci {
char farmaco[13];
char data[11];
struct farmaci *next;
};
struct atleta{
int matricola;
struct farmaci *f;
};
e successivamente dichiarato un array della struct atleta:
struct atleta archivio[N];
con N in #define,
il mio problema sta quando voglio inizializzare più farmaci riferiti allo stesso atleta perchè dopo aver inizializzato il primo farmaco(prendendo op da uno scanf precedente), scrivo questo:
for(j=1;j<op;j++)
{
archivio.f->next=malloc(sizeof(struct farmaci));
archivio.f=archivio.f->next; //IL MIO PROBLEMA è QUI **
printf("Inserisci sigla farmaco %d:\n",j+1);
scanf("%s",archivio.f->farmaco);
printf("Inserisci data prescrizione farmaco:\n");
scanf("%s",&archivio.f->data);
}
(archivio.f)->next=NULL;
}

**quando vado a verificare di aver inizializzato tutto correttamente, stampando la lista, viene visualizzato solo l'ultimo farmaco inserito per ogni atleta
mi sfugge qualcosa!!!
aiutatemiiiii,per favore e grazie !!
Spero di aver scritto in maniera comprensibile!

7 Risposte

  • Re: Problema con array di liste

    Perché j parte da 1?
    la sequenza non è corretta ... Per ora non posso risponderti meglio... ne riparliamo tra un po'
  • Re: Problema con array di liste

    Uso l'indice i per fare scorrere l' array di lista e l'indice j per inserire invece i farmaci fino all'intero op che ho inizializzato in fase di esecuzione
    j parte da 1 perchè il primo farmaco l'ho già inizializzato prima del for, per cui se ce ne sono altri allora alloco il campo next altrimenti no
  • Re: Problema con array di liste

    Okkk grazie
  • Re: Problema con array di liste

    Mostra il codice completo della prima parte... Ne riparliamo tra un po'
  • Re: Problema con array di liste

    int main(int argc, char *argv[])
    {
        struct atleta archivio[N],*a;
        a=archivio;
         FILE *fp,*fc;
        int i,j,op;
       
        for(i=0;i<N;i++){
         printf("Inserisci matricola:\n");  
         scanf("%d",&archivio[i].matricola);
          printf("Inserire il numero di farmaci assunti dall'atleta: ");
          scanf("%d",&op);
          archivio[i].f=malloc(sizeof(struct farmaci));
              printf("Inserisci sigla farmaco:\n");
              scanf("%s",archivio[i].f->farmaco);
              printf("Inserisci data prescrizione farmaco:\n");
              scanf("%s",&archivio[i].f->data);
          for(j=1;j<op;j++)
          {   
          archivio[i].f->next=malloc(sizeof(struct farmaci));
          archivio[i].f=archivio[i].f->next;
          printf("Inserisci sigla farmaco %d:\n",j+1);
          scanf("%s",archivio[i].f->farmaco);
          printf("Inserisci data prescrizione farmaco:\n");
          scanf("%s",&archivio[i].f->data);
          }
          (archivio[i].f)->next=NULL;
          }
          
         
         for(i=0;i<N;i++)
          {while(a->f!=NULL)
           {printf("%s\n",(a->f)->farmaco);
            a->f=(a->f)->next;
            }
            a++;
            }
            
         /*
    struct atleta *a2;
    a2=uno(a,fp);
          
          
          
          for(i=0;i<N;i++)
          {while(a2->f!=NULL)
           {printf("%s\n",a2->f->farmaco);
            a2->f=a2->f->next;
            }
            a2++;
            }*/
         
         
         
        
      system("PAUSE");	
      return 0;
    }
    
    Ecco il codice..
  • Re: Problema con array di liste

    Direi che una soluzione sarebbe
    
        struct atleta archivio[N];
        int i,j,op;
       
        for(i=0;i<N;i++)
    	{
    		printf("Inserisci matricola:\n");  
    		scanf("%d",&archivio[i].matricola);
    		archivio[i].f = NULL;
    
    		printf("Inserire il numero di farmaci assunti dall'atleta: ");
    		scanf("%d",&op);
    
    		if(op)
    		{
    			struct farmaci **p = &archivio[i].f;
    
    			for(j=0;j<op;j++)
    			{   
    				*p = (farmaci *)malloc(sizeof(struct farmaci));
    
    				printf("Inserisci sigla farmaco %d:\n",j+1);
    				scanf("%s", (*p)->farmaco);
    			
    				printf("Inserisci data prescrizione farmaco:\n");
    				scanf("%s", (*p)->data);
    
    				p = &((*p)->next);
    			}
    		
    			*p=NULL;
    		}
    	}
    
  • Re: Problema con array di liste

    Ok grazie mille
Devi accedere o registrarti per scrivere nel forum
7 risposte