View Full Version : [C]Lista di liste, puntatori e funzioni
xglobusx
04-09-2005, 21:54
Mi potete aiutare con questo problema?
Ho una lista di liste, a seconda di una valore preciso scandisco la lista principale, quando individuo la struct esatta devo stampare il contenuto della lista che parte da questa. Devo fare il tutto con una funzione che riceve il valore da trovare e la testa della lista principale.
La funzione che ho creato riesce a trovare la struct esatta della lista principale, ma non riesco ad accedere alla secondaria.
Temo di non essermi spiegato bene..al massimo aggiungo il codice
posta il codice..comuqnue si tratta di scorrere la seconda lista comsi come scorri la prima...
xglobusx
05-09-2005, 10:24
lo so che bisogna scorrere la lista ma non so come puntare alla seconda lista.
La lista è già fatta e nel main riesco a scorrere le liste, stampare e tutto funge.
le liste sono formate da:
struct misura{
int mis;
struct misura *succ;
};
struct sensore{
char cod[6];
struct sensore *next;
struct misura *m_next;
};
nel main la funzioe viene chiamata così (struct sensore *testa):
funzM(codric, &testa);
e questa è la funzione:
funzM(char *codice_ric , struct sensore **head){
struct sensore *aux;
struct misure **maux;
int misu;
char vett[10];
aux=*head;
maux=aux->m_next;
while(aux!=NULL){
if(strcmp(aux->cod, codice_ric)==0){
while(maux!=NULL){
printf("%d\n", aux->m_next->mis);
maux=mauxsucc;
}
aux=aux->next;
}
else{
aux=aux->next;
}
}
}
maux=mauxsucc;
???
che è maxsucc?
maux=aux->m_next;
c'è qualche casino con gli * e &. su maux uno è di troppo, e è anche sbaglitao il nome della struttura.
la dichiari come misura e la usi come misure.
perchè poi passi l'indirizzo del puntatore alla testa invece che il puntatore?
potrebbe servirti per modificare la testa, ma in una funzione che deve solo leggere non ha senso e gli dà "troppi privilegi"
poi hai due variabili non utilizzate, ma suppongo che ti servano una volta risolto il problema.
vediamo se ho capito che deve fare la funzione:
hai la tua lista di sensori, cerchi il tuo sensore e poi vuoi stampare tutte le misure che sono state memorizzate nella lista di quello specifico sensore.
giusto?
se si allora il primo errore che vedo è
maux= aux->m_next;
lì aux è la testa della tua lista (se risolvi il problema degli *), non è il sensore che vuoi....
maux lo dovresti sistemare appena hai trovato il tuo sensore, non all'inizio ;)
poi c'è quel mauxsucc.
suppongo dovrebbe essere una cosa del tipo
maux = maux->succ;
poi sula fine del ciclio interno metti un passaggio che scorre la lista sul prossimo elemento.
quindi c'è un else e scorri l'elemento...
perchè non lo metti semplicemente fuori dall'if?
intanto sia che vada bene sia che vada male il controllo di strcmp quello lo fai dopoo il blocco dell'if, quindi puoi semplicemente lasciarlo fuori senza alcuna condizione.
ciao!
xglobusx
05-09-2005, 22:00
grazie mille ho corretto e funziona, non ho capito quello che hai scritto riguardo la strcmp, cosa ho scritto di inutile?
if(strcmp(aux->cod, codice_ric)==0){
....
aux=aux->next;
}
else{
aux=aux->next;
}
if(strcmp(aux->cod, codice_ric)==0){
....
}
aux=aux->next;
ciao!
xglobusx
06-09-2005, 13:41
ahhh! ho capito, io l'else lo metto quasi sempre perchè se riguardo il codice poi nn capisco più! sono ancora all'inizio..
Ciao e grazie
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.