Lo dico per te, secondo me devi studiarti meglio i puntatori, dal tuo codice vedo che hai le idee pochi chiare.
Codice:
nodo *cancella(nodo *start)
{
char parola[20]; nodo *nuovo2,*tmp;
printf("Quale oggetto vuoi eliminare?\t");
scanf("%s", parola);
nuovo2=start;
if(!strcmp(nuovo2->nome,parola)) // se l'elemento si trova in prima posizione
{
start=start->next;
free(nuovo2);
printf("L'oggetto da te richiesto (%s) č stato correttamente ELIMINATO\n", parola);
printf("\n");
return start;
}
else
{
while (nuovo2->next!=NULL&&strcmp(nuovo2->next->nome,parola))
{
nuovo2=nuovo2->next;
}
if(nuovo2->next!=NULL) //elemento trovato!
{
tmp=nuovo2->next;
nuovo2->next=nuovo2->next->next;
free(tmp);
printf("L'oggetto da te richiesto (%s) č stato correttamente ELIMINATO\n", parola);
printf("\n");
return start;
}
else // elemento non trovato
{
printf("L'oggetto da te richiesto (%s) non č stato trovato \n", parola);
printf("\n");
return start;
}
}
Questa č la funzione delete per come dovrebbe essere scritta. Comunque ci sono diversi errori nel tuo sorgente. In pratica quasi sempre non consideri mai l'eventualitā che la parola non venga trovata.
Ad esempio nella funzione trova dovresti aggiungere la riga:
Codice:
void trova(nodo *start)
{
char parola[20];
printf("Quale oggetto vuoi ricercare?\t");
scanf("%s", parola);
while( strcmp (parola, start->nome) !=0)
{
start=start->next;
}
if(start!=NULL)
printf("%s\t %d\n", start->nome, start->q); printf("\n");
else
printf("Elemento non trovato");
}