Problema funz stampa lista-sottolist

di il
5 risposte

Problema funz stampa lista-sottolist

Ciao a tutti ho un problema con la funzione di stampa di una lista e della sua sottolista. La prima volta che viene lanciata stampa tutto correttamente, dalla seconda in poi stampa solo la lista ma non la sottolista, come se venisse persa o cancellata.

il codice che ho scritto è il seguente:

void StampaLista(TipoLista l) {
	TipoLista s;
	s=l;
	while (s != NULL) {
		printf("%s %s %s %d %d\n", s->tipo, s->descr, s->data, s->copie, s->copdisp);
		while (s->listcopie != NULL) {
			printf("%d %d\n", s->listcopie->col, s->listcopie->rig);
			s->listcopie=s->listcopie->next;
		}
		s=s->next;
	}
	printf("\n");
}
spero in un consiglio aiuto, vi ringrazio

5 Risposte

  • Re: Problema funz stampa lista-sottolist

    La funzione di visualizzazione si basa sui puntatori e i dati dei vari elementi della lista.

    Se in un'altra funzione (di aggiunta di un nodo) ci sono degli errori, ovviamente la visualizzazione sarà errata.
  • Re: Problema funz stampa lista-sottolist

    Intanto grazie, come si può spiegare il fatto che la prima volta stampa correttamente e dopo no. comunque tutte le altre operazioni sulla lista vengono eseguite correttamente, inserimento, cancellazione ecc...
  • Re: Problema funz stampa lista-sottolist

    Posta il main che diamo un'occhiata migliore ...
  • Re: Problema funz stampa lista-sottolist

    Questo il main
    
    int main () {
    	FILE *fp;
    	char tipos[30], descrit[30], da[10];
    	int cop, copd, scelta, i;
    	TipoLista l, s;  
    	if ((fp=fopen(USER_FILE,"r" )) == NULL ) {
    		printf ("Errore: impossibile aprire il file %s\n",USER_FILE);
    		exit(1);
    	}		
    	l=NULL;
    	int rc = getc(fp);
        if (rc == EOF) printf("File vuoto\n");
    	else {
    		while (!feof(fp)) {				
    			fscanf(fp, "%s %s %s %d %d\n", tipos, descrit, da, &cop, &copd);	
    			strcpy(tipos,Sosttrat(tipos));
    			strcpy(descrit,Sosttrat(descrit));
    			ConvertiLettere(tipos);
    			ConvertiLettere(descrit);
    			if (l == NULL) { //la lista era vuota */
    				l=malloc(sizeof(struct NodoLista));
    				s=l;
    			}
    			else { //la lista contiene gia' elementi */
    				s->next=malloc(sizeof(struct NodoLista));
    				s=s->next;     
    			}		
    			strcpy(s->tipo, tipos);
    			strcpy(s->descr, descrit);
    			strcpy(s->data, da);
    			s->copie=cop;
    			s->copdisp=copd;
    			i=1;
    			while (i <= cop) {	
    				conta++;			
    				InserisciCopia(s);
    				i++;
    			}	
    			s->next=NULL;    
    		}
    	}
    	while (1) {
    		printf("\n                *** MENU' ***\n\n");
    		printf("1 - Inserisci\n");
                    printf("2 - Inserisci copia\n");
    		printf("3 - Prestito\n");
    		printf("4 - Restituzione\n");
    		printf("5 - Cancellazione\n");
    		printf("6 - Stampa lista\n");
    		printf("7 - Esci e Salva\n\n");
    		printf("Inserisci opzione scelta\n");
    		while ((scelta=getchar()) == '\n');
    			switch (scelta) {
    				case '1':
    					Inserisci(l);
    					break;
                                    case '2':
    					InserisciCopia(l);
    					break;
    				case '3':
    					Prestito(l);
    					break;
    				case '4':
    					Restituzione(l);
    					break;
    				case '5':
    					Cancella(l);
    					break;
                                    case '6':
    					StampaLista(l);
    					break;
    				case '7':
    					fclose(fp); //chiudo file
    					remove("prova.txt"); //cancello file
    					RicreaFile(l);
    					break;
    				default:
    					printf("Scelta non valida\n");
    					break;
    			}     
    	}
    }
    
  • Re: Problema funz stampa lista-sottolist

    Ho risolto in questo modo:
    
    void StampaLista(TipoLista l) {
    	copia s;
    	while (l != NULL) {	
    		s=l->listcopie;
    		printf("%s %s %s %d %d\n", l->tipo, l->descr, l->data, l->copie, l->copdisp);
    		while (s != NULL) {
    			printf("%d %d\n", s->col, s->rig);
    			s=s->next;
    		}
    		l=l->next;
    	}
    	printf("\n");
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte