Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Le strutture...queste sconosciute (almeno per me)
Forum - C/C++ - Le strutture...queste sconosciute (almeno per me)

Avatar
privi87 (Normal User)
Rookie


Messaggi: 30
Iscritto: 03/02/2007

Segnala al moderatore
Postato alle 10:58
Martedì, 24/04/2007
Salve a tutti,
vengono subito al sodo, sperando che qualcuno mi possa aiutare.
Non riesco a far funzionare il ciclo do while seguente :

Codice sorgente - presumibilmente C/C++

  1. struct elemento *puntLista, *puntLista2;
  2. //creo una lista
  3. puntLista = creaLista();
  4. //la copio
  5. puntLista2 = puntLista;
  6.  
  7. do {
  8. //funzione che modifica la lista
  9. puntLista = modifica(puntLista);
  10. visualizza(puntLista);
  11. //aggiorno puntLista2
  12. puntLista2 = puntLista;
  13. }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 il 24/04/2007 alle 11:04
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 4:20
Mercoledì, 25/04/2007
Trattandosi appunto di puntatori a struttura, nel tuo codice

Codice sorgente - presumibilmente Plain Text

  1. puntLista2 = puntLista;
  2. }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: https://piero.dev
PM Quote
Avatar
privi87 (Normal User)
Rookie


Messaggi: 30
Iscritto: 03/02/2007

Segnala al moderatore
Postato alle 20:18
Mercoledì, 25/04/2007
Scusate ho sbagliato a prendere il codice, effettivamente è sbagliato quello, il codice giusto era così :

Codice sorgente - presumibilmente Plain Text

  1. puntLista = creaLista();
  2. while(puntLista2 == puntLista) {
  3. puntLista2 = puntLista;
  4. puntLista = modifica(puntLista);
  5. }



ecco ora è giusto...scusate ma mi ero sbagliato!
Cmq grazie della risposta, devo quindi controllare valore per valore. :k:

Ultima modifica effettuata da privi87 il 25/04/2007 alle 20:19
PM Quote
Avatar
null (Normal User)
Newbie


Messaggi: 9
Iscritto: 14/09/2006

Segnala al moderatore
Postato alle 11:37
Venerdì, 04/05/2007
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!


PM Quote