Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    Ragazzi ma proprio nessuno risponde, lo so che sarebbe formativo riuscirci da solo ma non ci riesco ed è circa 10 ore che ci provo.

  2. #12
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Dai un'occhiata a questo codice inserito nel main e parti da questo per trasformarlo in *una sola* funzione (non primo e prossimo ma una sola funzione di lettura)

    codice:
       case 7:
          FILE *fp;
          struct cliente *ptmp;
    
          fp=fopen("listaclienti.txt","r");
    
          i=1;
          while(!feof(fp))
          {
             ptmp = (cliente *)malloc(sizeof(struct cliente));
             ptmp->next = NULL;
    
             fscanf(fp,"%d %s %s",&ptmp->codice,ptmp->nome,ptmp->cognome);
    
             if(i==1)
                p = ptmp;
             else
             {
    	     struct cliente *t = p;
    
    	     while(t->next!=NULL)
    	        t=t->next;
    		
                 t->next = ptmp;			
             }
    
             i++;
          }
    
          fclose(fp);
          break;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #13
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    grazie oregon ora il problema è che quando visualizzo la lista mi riporta dei numeri strani.
    nel case 7 ho allocato la memoria a p e glielo passo alla funzione con il codice sopra.

  4. #14
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Cioè ? Cosa hai scritto ?

    La memoria viene allocata dal codice che ti ho mostrato, non devi allocarne altra ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #15
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    codice:
    case 7: p = (struct cliente*)malloc(sizeof(struct cliente));
    			leggilista(p);
    
    ...
    
    void leggilista(struct cliente *p)
    {
    FILE *fp;
    struct cliente *ptmp;
    
    
    fp=fopen("listaclienti.txt","a+");
    
    i=1;
          		while(!feof(fp))
          			{
             		ptmp =(struct cliente*)malloc(sizeof(struct cliente));
             		ptmp->next = NULL;
    
             		fscanf(fp,"%d %s %s",&ptmp->codice,ptmp->nome,ptmp->cognome);
    
             			if(i==1) p = ptmp;
    				
             			else p->next = ptmp;
    
             		i++;
          			}
    fclose(fp);
    }
    ho scritto questo , ho pensato che dovevo passare p no?

  6. #16
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Allora

    1) io avevo modificato il codice e aggiunto una parte ... tu hai usato la prima versione ... usa il codice con le modifiche ...

    2) non devi allocare nulla quando chiami la funzione

    3) la funzione deve accettare un doppio puntatore alla struttura, ovvero

    void leggilista(struct cliente **pp)

    ed essendo void non restituisce nulla. Quindi devi chiamarla con

    p = NULL;
    leggilista(&p);

    Ovviamente dovrai modificare il codice della funzione in modo che utilizzi il doppio puntatore pp al posto del singolo puntatore p

    E alla fine funzionerà
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #17
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    ecco il problema non ho studiato il doppio puntatore **pp non l'ho mai visto e il prof non lo ha mai spiegato, c'è un modo per farlo senza? se no sono rovinato.

  8. #18
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Beh ... allora rifacciamo tutto ... questa è la funzione

    codice:
    struct cliente* leggilista()
    {
    	FILE *fp;
    	struct cliente *p=NULL, *pcur, *ptmp;
    
    	fp=fopen("listaclienti.txt", "r");
    
    	i=1;
        while(!feof(fp))
        {
            ptmp =(struct cliente*)malloc(sizeof(struct cliente));
            ptmp->next = NULL;
    
            fscanf(fp,"%d %s %s",&ptmp->codice,ptmp->nome,ptmp->cognome);
    
    		if(i==1)
    		{
    			p = ptmp;
    			pcur = p;
    		}
    		else
    		{
    			pcur->next = ptmp;
    			pcur = pcur->next;
    		}
    
            i++;
        }
    
    	fclose(fp);
    
    	return p;
    }
    e la chiami semplicemente con

    p = leggilista();
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #19
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    ti ringrazio infinitamente, mi hai dimostrato che devo imparare ancora moltissimo e soprattutto devo prendere molta piu' confidenza con i puntatori e di conseguenza le liste dinamiche.

    Sei stato di grande aiuto.Grazie Grazie Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.