Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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: 6109
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


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
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:


Ero solito portare una pallottola nel taschino, all'altezza del cuore.
Un giorno un tizio mi tirò addosso una Bibbia, ma la pallottola mi salvò la vita.

(Woody Allen)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
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


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
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") ;)


Ero solito portare una pallottola nel taschino, all'altezza del cuore.
Un giorno un tizio mi tirò addosso una Bibbia, ma la pallottola mi salvò la vita.

(Woody Allen)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
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:


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
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-|


Ero solito portare una pallottola nel taschino, all'altezza del cuore.
Un giorno un tizio mi tirò addosso una Bibbia, ma la pallottola mi salvò la vita.

(Woody Allen)
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