Problema liste

di il
3 risposte

Problema liste

Ciao a tutti ho un problema con una funzione "Acquisto", non mi aggiunge un nuovo elemento nella lista, quando provo a stamparla, l'elemento nuovo appena inserito non compare. Vi posto il codice:

TipoLista Acquisto(TipoLista l) { 

	printf("\n *** ACQUISTO ***\n\n");
			while (l!=NULL) {
			if(strcmp(l->auto,VUOTO)==0) {
				printf("---Inserisci marca: ");
				scanf("%s:",l->auto);
				printf("Inserisci modello: ");
				scanf("%s:",l->modello);
				printf("Inserisci anno: ");
				scanf("%s:",l->anno);
				l->num=1;
				l->pos=0;
				printf("\n2Dati inseriti correttamente\n");
				return(l);
			}
			else l=l->next;	
		}			
			l=malloc(sizeof(struct NodoLista));
			printf("Inserisci marca: ");
			scanf("%s:",l->marca);
			printf("Inserisci modello: ");
			scanf("%s:",l->modello);
			printf("Inserisci anno: ");
			scanf("%s:",l->anno);
			l->num=1;
			l->pos=0; 
			l->s=((conta+1)/K);
			l->p=((conta+1)%K);	
			l->next = NULL;
			printf("\n3Dati inseriti correttamente\n");	
		        return(l);
 } 

3 Risposte

  • Re: Problema liste

    VUOTO è un define di qualcosa?
  • Re: Problema liste

    Ciao skynet, si... #define VUOTO "VUOTO", questa parte di codice funziona, perché quando incontra il primo campo con "VUOTO" lo sovrascrive, cambiando i valori di tutti i campi della struct
  • Re: Problema liste

    Semplicemente perchè non lo linki....
    Tu scorri tutta la lista "l" e se non trovi un "VUOTO" crei un nuovo "nodo" ma come fa la lista a sapere dove puntare???
    
    TipoLista Acquisto(TipoLista l) {
        TipoLista last;
       printf("\n *** ACQUISTO ***\n\n");
             while (l!=NULL) {
             if(strcmp(l->auto,VUOTO)==0) {
                printf("---Inserisci marca: ");
                scanf("%s:",l->auto);
                printf("Inserisci modello: ");
                scanf("%s:",l->modello);
                printf("Inserisci anno: ");
                scanf("%s:",l->anno);
                l->num=1;
                l->pos=0;
                printf("\n2Dati inseriti correttamente\n");
                return(l);
             }
             else 
             {
                   last=l; ///memorizzo l'ultimo nodo
                   l=l->next;   
             }
          }         
             l=malloc(sizeof(struct NodoLista));
             printf("Inserisci marca: ");
             scanf("%s:",l->marca);
             printf("Inserisci modello: ");
             scanf("%s:",l->modello);
             printf("Inserisci anno: ");
             scanf("%s:",l->anno);
             l->num=1;
             l->pos=0;
             l->s=((conta+1)/K);
             l->p=((conta+1)%K);   
             l->next = NULL;
    
             last->next=l;///LINKO
    
             printf("\n3Dati inseriti correttamente\n");   
                  return(l);
    } 
    
    ho cercato di non modificare il tuo codice in modo che capissi il concetto.Spero migliorerai l'implementazione.
Devi accedere o registrarti per scrivere nel forum
3 risposte