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++ - sono disperata aiuto! sulle liste
Forum - C/C++ - sono disperata aiuto! sulle liste

Avatar
sofia_++ (Normal User)
Newbie


Messaggi: 1
Iscritto: 14/10/2005

Segnala al moderatore
Postato alle 17:10
Venerdì, 14/10/2005

ricerco un elemento in una lista per poi restituirlo alla funzione modifica per modificarne i dati.ecco la ricerca del mio programma che non so perche se inserisco il nome del primo cliente e poi chiedo di cercarlo ,lo trova ma se per esempio cerco il nome del terzo cliente non lo trova.si limita a cercare nel primo nodo(in basso ho riportato la funzione di inserimento)


persona* azienda :: ricerca()
{
    persona * pt=punt;
  
   char name[20];
   cout<<"\nInserisci il nome della persona da cercare: ";
   cin>>name;

    while(pt!=0)
   {
       if(strcmp(name,pt->nome)==0)
      {

         return pt;
      }
      pt=pt->succ;
   }
      return 0;

}


//questo  e linserimento ma penso sia giusto
istream& operator>>(istream &is,azienda ®istro)
{
    clrscr();
    persona * pt = registro.punt;
   persona * aux=new persona;


  if(registro.punt==0) //primo nodo
     registro.punt=aux;
  else
  {
        while(pt)
           pt=pt->succ;

      pt=aux;
   }

   aux->succ=0;

//   aux=new persona;  //alloco una variabile dinamica
   cout<<"\nInserisci il nome del cliente:  ";
   is>>aux->nome;
   cout<<"\nInserisci il cognome del cliente:  ";
   is>>aux->cognome;
   cout<<"\nInserisci l'indirizzo del cliente:  ";
   is>>aux->indirizzo;
   cout<<"\nInserisci il numero civico del cliente:  ";
   is>>aux->n_civico;
   cout<<"\nInserisci la ragione sociale del cliente:  ";
   is>>aux->r_sociale;
   cout<<"\nInserisci il telefono del cliente:  ";
   is>>aux->n_tel;

   return is;
}
domani devo consegnare il programma al prof,,,,

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:35
Venerdì, 14/10/2005
Testo quotato

Postato originariamente da sofia_++:

while(pt!=0)
{
       if(strcmp(name,pt->nome)==0)
      {

         return pt;
      }
     pt=pt->succ;
   }




Siccome dici che il primo elemento lo trova, a occhio direi che il problema dovrebbe essere qui:

Codice sorgente - presumibilmente Plain Text

  1. pt=pt->succ;



Questo codice cosa dovrebbe fare? Assegnare al puntatore pt l'indirizzo dell'elemento successivo giusto? Prova a postarci la funzione "succ", per vedere se l'errore ? effettivamente l

Ultima modifica effettuata da pierotofy il 14/10/2005 alle 20:36


Il mio blog: https://piero.dev
PM Quote
Avatar
Rand (Ex-Member)
Pro


Messaggi: 163
Iscritto: 17/05/2005

Segnala al moderatore
Postato alle 15:01
Sabato, 15/10/2005
Per me l'errore sta qua...
Testo quotato

Postato originariamente da sofia_++:


persona* azienda :: ricerca()
{
    persona * pt=punt;
  



a cosa assegni pt??! ...spero che punt... corrisponda al primo elemento della lista! :-|

e poi Piero... "succ" non ? una funzione!! ...dovrebbe essere semplicemente un puntatore di tipi classe... all'elemento successivo della lista!;)

ps...cmq faresti meglio a postare tutto il programma completo... altrimenti... non possiamo testarlo sui nostri pc (e nemmeno col debugger!!)

ciaoo :k:

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:18
Sabato, 15/10/2005
Testo quotato

Postato originariamente da Rand:
e poi Piero... "succ" non ? una funzione!! ...dovrebbe essere semplicemente un puntatore di tipi classe... all'elemento successivo della lista!



A parte che senza il sorgente ? impossibile dirlo, ma per quale motivo ritieni che non pu? essere una funzione che ritorna un puntatore all'elemento successivo della lista?

Ultima modifica effettuata da pierotofy il 15/10/2005 alle 16:19


Il mio blog: https://piero.dev
PM Quote
Avatar
Ivan (Founder Member)
Newbie


Messaggi: 20
Iscritto: 02/10/2005

Segnala al moderatore
Postato alle 20:11
Sabato, 15/10/2005
Testo quotato

Postato originariamente da Rand:

Per me l'errore sta qua...
Testo quotato

Postato originariamente da sofia_++:


persona* azienda :: ricerca()
{
    persona * pt=punt;
  


a cosa assegni pt??! ...spero che punt... corrisponda al primo elemento della lista! :-|



Concordo con Rand :k:, punt deve essere inizializzato al 1? elemento della lista...

Ultima modifica effettuata da Ivan il 15/10/2005 alle 20:12
PM Quote
Avatar
Rand (Ex-Member)
Pro


Messaggi: 163
Iscritto: 17/05/2005

Segnala al moderatore
Postato alle 22:07
Sabato, 15/10/2005
perch? Piero... le funzioni in c++ (anche all'interno delle classi)... hanno alla fine le parentesi tonde (es... o.calc()) 8-|

...miraccomando... tienitelo in testa!! :D

ps... e poi nelle liste... quel nome... ? sicuramente un puntatore all'elemento successivo! (pure io uso "pros") ;)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:54
Martedì, 18/10/2005
Upps, vero :-|

Chiedo venia, devo aver passato troppo tempo con il Delphi ultimamente. :asd:


Il mio blog: https://piero.dev
PM Quote
Avatar
Rand (Ex-Member)
Pro


Messaggi: 163
Iscritto: 17/05/2005

Segnala al moderatore
Postato alle 17:59
Mercoledì, 19/10/2005
Testo quotato

Postato originariamente da pierotofy:

Upps, vero :-|

Chiedo venia, devo aver passato troppo tempo con il Delphi ultimamente. :asd:




eheh :asd: :D
...su... ti perdono! ;) ...ma non ritornare con il c++ all'inizio dopo un po che non lo usi!! 8-|8-|

PM Quote
Avatar
Lucatarik (Suspended Member)
Rookie


Messaggi: 56
Iscritto: 10/11/2005

Segnala al moderatore
Postato alle 4:28
Sabato, 12/11/2005
if(strcmp(name,pt->nome)==0)
{
return pt;
}

ma dovrebbe ritornare un valore solo se string compare ? uguale a true!!!
senn? se la stringa immessa non ? uguale a quella del 1? valore della lista ti esce lo stesso dal ciclo!!
dovrebbe essere cos?:

if(strcmp(name,pt->nome)==0)
{
pt=pt->succ
} else return pt;

PM Quote