|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
[C]Lista di liste, puntatori e funzioni
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 Ultima modifica di xglobusx : 04-09-2005 alle 21:58. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
posta il codice..comuqnue si tratta di scorrere la seconda lista comsi come scorri la prima...
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
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; } } } |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Codice:
maux=mauxsucc; che è maxsucc? Codice:
maux=aux->m_next; 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 è Codice:
maux= aux->m_next; 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! |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
grazie mille ho corretto e funziona, non ho capito quello che hai scritto riguardo la strcmp, cosa ho scritto di inutile?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Codice:
if(strcmp(aux->cod, codice_ric)==0){ .... aux=aux->next; } else{ aux=aux->next; } Codice:
if(strcmp(aux->cod, codice_ric)==0){ .... } aux=aux->next; ciao! |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Aug 2004
Messaggi: 210
|
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:45.