Oppure

Loading
24/04/07 8:58
privi87
Salve a tutti,
vengono subito al sodo, sperando che qualcuno mi possa aiutare.
Non riesco a far funzionare il ciclo do while seguente :

struct elemento *puntLista, *puntLista2;
//creo una lista
puntLista = creaLista();
//la copio
puntLista2 = puntLista;

do {
//funzione che modifica la lista
puntLista = modifica(puntLista);
visualizza(puntLista);
//aggiorno puntLista2
puntLista2 = puntLista;
}while (puntLista2 != puntLista);


Con questo ciclo dovrei continuare a modificare la lista puntLista con un algortimo che nn sto a descrivere fino a quando questa lista ha condizioni che permettano la modifica. Quando ho semplificato tutto il semplificabile mi dovrei fermare. Dunque ho pensato di creare una copia della vecchia puntLista (puntLista2) modificarla e poi ricontrollare che puntLista fosse uguale o meno puntLista2. Se sono uguali vuol dire che nn ho potuto modificare nulla e quindi mi fermo, altrimenti continuo a modificare la lista.

il problema sta nel fatto che quando vado a fare puntLista2 = puntLista, puntLista2 nn copia tutti i valori di puntLista ma ci punta soltanto, quindi quando vado a modificare puntLista si modifica anche puntLista2. Qualcuno sa come posso fare affinchè non accada questo? Cioè cosa devo fare per creare una copia a sè stante di puntLista??

Grazie mille!!
Ultima modifica effettuata da privi87 24/04/07 9:04
aaa
25/04/07 2:20
pierotofy
Trattandosi appunto di puntatori a struttura, nel tuo codice

puntLista2 = puntLista;
}while (puntLista2 != puntLista); 


Crea ovviamente una condizione che sarà sempre vera e di conseguenza il ciclo non si ferma più. Per verificare che le due strutture non contenghino gli stessi valori, devi per forza controllare ogni valore della prima con ogni valore della seconda e di conseguenza, creare un'apposita funzione che lo faccia.
Il mio blog: piero.dev
25/04/07 18:18
privi87
Scusate ho sbagliato a prendere il codice, effettivamente è sbagliato quello, il codice giusto era così :

puntLista = creaLista();
while(puntLista2 == puntLista) {
puntLista2 = puntLista;
puntLista = modifica(puntLista);
}


ecco ora è giusto...scusate ma mi ero sbagliato!
Cmq grazie della risposta, devo quindi controllare valore per valore. :k:
Ultima modifica effettuata da privi87 25/04/07 18:19
aaa
04/05/07 9:37
null
A prescindere dal problema posto, il mio C è un po' arrugginito ma secondo me la condizione:

while (puntLista2 != puntLista)

è sempre falsa per cui il blocco del do viene eseguito una volta sola!

aaa