sofia_++ (Normal User)
Newbie
Messaggi: 1
Iscritto: 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,,,,
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
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 |
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
|
|
Rand (Ex-Member)
Pro
Messaggi: 163
Iscritto: 17/05/2005
|
Per me l'errore sta qua...
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 |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
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
|
|
Ivan (Founder Member)
Newbie
Messaggi: 20
Iscritto: 02/10/2005
|
Postato originariamente da Rand:
Per me l'errore sta qua...
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 , punt deve essere inizializzato al 1? elemento della lista...
Ultima modifica effettuata da Ivan il 15/10/2005 alle 20:12 |
|
Rand (Ex-Member)
Pro
Messaggi: 163
Iscritto: 17/05/2005
|
perch? Piero... le funzioni in c++ (anche all'interno delle classi)... hanno alla fine le parentesi tonde (es... o.calc())
...miraccomando... tienitelo in testa!!
ps... e poi nelle liste... quel nome... ? sicuramente un puntatore all'elemento successivo! (pure io uso "pros")
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Upps, vero
Chiedo venia, devo aver passato troppo tempo con il Delphi ultimamente.
|
|
Rand (Ex-Member)
Pro
Messaggi: 163
Iscritto: 17/05/2005
|
Postato originariamente da pierotofy:
Upps, vero
Chiedo venia, devo aver passato troppo tempo con il Delphi ultimamente. |
|
|
Lucatarik (Suspended Member)
Rookie
Messaggi: 56
Iscritto: 10/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;
|
|