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++ - ricerca in una coda
Forum - C/C++ - ricerca in una coda

Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 11:35
Giovedì, 25/06/2009
Ciao a tutti!!
E'da un pò che sclero con una coda..Magari sto scrivendo delle oscenità ma nn trovo l'errore!!!Potete guardare un pò???? ;)
devo fare un inserimento tramite funzione e credo che ameno quello funzioni(anche perchè è quasi identico al libro)

int inserisci_in_coda(archivio **pt_testa,archivio **pt_coda)
{
archivio *p_corr;
char terminatore;
int num;
num=0;

terminatore=' ';

while(terminatore!=EOF)
{
printf("inserisci nome,cognome,età e peso\n");
p_corr=(archivio *)malloc(sizeof(archivio));
scanf("%s%s%d%d%c",(*p_corr).nome,(*p_corr).cognome,&(*p_corr).eta,&(*p_corr).peso,&terminatore);
num++;
if(*pt_testa==NULL)
{
*pt_testa=p_corr;
*pt_coda=p_corr;
}
else
{
    *pt_testa=p_corr;
    (**pt_testa).prox=p_corr;
}
}

return(num);
}





ora il problema è che devo inserire da tastiera un cognome da cercare nella coda e tutti i miei tentativi portano a 2 risultati(in base a come chiamo la testa o la coda):
se passo la testa il puntatore corrente punta a NULL (quindi esce)o resta fermo su se stesso(tipo un ciclo infinito)
Questa è la seconda funzione:


void visualizza(archivio *p_testa,archivio **p_trovato,char cognome[],int num)
{
archivio *p_corr;
boolean trovato;
int indice;



trovato =FALSE;
p_corr=p_testa;
while((p_corr!=NULL)&&(!trovato))
{
    if(strcmp(cognome,(*p_corr).cognome)==0)
      {
      trovato=TRUE;
     *p_trovato=p_corr;
      p_corr=NULL;
      }
      else
        p_corr=(*p_corr).prox;
}

if(!trovato)

printf(" questo cognome nn è in lista!!\n");

return;
}

GRAZIE!!!!!:asd:

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 12:05
Giovedì, 25/06/2009
Testo quotato

Postato originariamente da nene896:

Ciao a tutti!!
E'da un pò che sclero con una coda..Magari sto scrivendo delle oscenità ma nn trovo l'errore!!!Potete guardare un pò???? ;)
devo fare un inserimento tramite funzione e credo che ameno quello funzioni(anche perchè è quasi identico al libro)

int inserisci_in_coda(archivio **pt_testa,archivio **pt_coda)
{
archivio *p_corr;
char terminatore;
int num;
num=0;

terminatore=' ';

while(terminatore!=EOF)
{
printf("inserisci nome,cognome,età e peso\n");
p_corr=(archivio *)malloc(sizeof(archivio));
scanf("%s%s%d%d%c",(*p_corr).nome,(*p_corr).cognome,&(*p_corr).eta,&(*p_corr).peso,&terminatore);
num++;
if(*pt_testa==NULL)
{
*pt_testa=p_corr;
*pt_coda=p_corr;
}
else
{
    *pt_testa=p_corr;
    (**pt_testa).prox=p_corr;
}
}

return(num);
}





ora il problema è che devo inserire da tastiera un cognome da cercare nella coda e tutti i miei tentativi portano a 2 risultati(in base a come chiamo la testa o la coda):
se passo la testa il puntatore corrente punta a NULL (quindi esce)o resta fermo su se stesso(tipo un ciclo infinito)
Questa è la seconda funzione:


void visualizza(archivio *p_testa,archivio **p_trovato,char cognome[],int num)
{
archivio *p_corr;
boolean trovato;
int indice;



trovato =FALSE;
p_corr=p_testa;
while((p_corr!=NULL)&&(!trovato))
{
    if(strcmp(cognome,(*p_corr).cognome)==0)
      {
      trovato=TRUE;
     *p_trovato=p_corr;
      p_corr=NULL;
      }
      else
        p_corr=(*p_corr).prox;
}

if(!trovato)

printf(" questo cognome nn è in lista!!\n");

return;
}

GRAZIE!!!!!:asd:



Cosi' a occhio mi sa che nell'inserimento hai invertito le istruzioni nel caso in cui la coda non e' vuota, dovrebbe essere cosi':

Codice sorgente - presumibilmente Plain Text

  1. (**pt_testa).prox=p_corr;
  2. *pt_testa=p_corr;



altrimenti a ogni inserimento perdi gli altri elementi e hai una testa che punta a se stessa ( con ovvii problemi per una successiva ricerca :-| ), comunque ho dato solo uno sguardo sommario al codice, non so se ci sono altri errori.
Comunque in futuro ti consiglio di includere il codice negli appositi TAG, sara' molto piu' leggibile.

Ciao. :k:

Luigi

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 13:53
Giovedì, 25/06/2009
Ho fatto come hai detto e nella visualizza ho cambiato il puntatore che passavo e ora funziona!!
GRAZIE !!:k:
ps la prox volta metterò il codice come hai detto!!  ;)

PM Quote