View Single Post
Old 26-07-2011, 10:12   #9
darkito85
Senior Member
 
L'Avatar di darkito85
 
Iscritto dal: Jun 2008
Cittā: Catania
Messaggi: 429
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");
    }
__________________
Amd X2 5600+ Brisbane -- GIGABYTE MA790X DS4 (REV 1.0)-- POV NVIDIA 9600GS0 EXO -- 2X1GB KINGSTON DDR2 800Mhz -- SAMSUNG HD250HJ 250GB -- LG FLATRON 20"
Trattive concluse: fgdac,k1ll3r,PhilAnselmo@Superjoint,danyrs92,emaborsa,ferone,Midia.
darkito85 č offline   Rispondi citando il messaggio o parte di esso