|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 371
|
[C] problema con il caricamento da file
Ciao a tutti ho un problema con il caricamento di una lista da file.
Ho una strutture del tipo struct album { Stringa TIPO; Stringa AUTORE; Stringa TITOLO; Stringa CASA_DISCOGRAFICA; int numero_canzoni; Stringa* ptr_canzoni; struct album* next; }; typedef struct album ALBUM; typedef ALBUM* ptr_album; Ogni volta che inserisco un album inserisco in testa alla lista. Per la funzione di salvataggio su file non ci sono problemi. Quando vado a caricare da file con fscanf( ) mi si blocca il programma o va in loop. Help pls
__________________
Processore Intel Core 2 Duo E6600 ; 2 Gb di RAM DDR2 ; Scheda video RADEON X1950 XTX da 512 mb ; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Ci serve un po' di codice per dire dove sbagli...
(usa il tag CODE) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 371
|
Sono riuscito a non far bloccare il programma.Ora carica il file,mi ero scordato di allocare memoria.
Ora quando carico il file in memoria e lo faccio stampare a video mi stampa tutto l'album correttamente.Solo le canzoni non me le stampa tranne l'ultima che inserisco. Ecco il codice. Questa è la funzione di stampa Codice:
int SalvaArchivio( ptr_album plis )
{
FILE* ptr;
int k=0;
ptr_album index;
ptr=fopen("FILE.txt","w");
if(ptr==NULL)
return 0; //errore
index=plis;
while(index!=NULL)
{
fprintf(ptr,"%s\t%s\t%s\t%s\n%d\n",index->TIPO,index->AUTORE,index->TITOLO,index->CASA_DISCOGRAFICA,index->NUMERO_CANZONI);
while(k<index->NUMERO_CANZONI)
{
fprintf(ptr,"%s\n",index->ptr_canzoni[k]);
k++;
}
index=index->NEXT;
}
fclose(ptr);
return 1;
}
Codice:
ptr_album CaricaArchivio( ptr_album plis )
{
FILE* ptr;
ptr_album index;
int k=0;
ptr=fopen("FILE.txt","r");
if(ptr==NULL)
{
printf("Il file non esiste\n");
return;
}
while(!feof(ptr))
{
index=(ALBUM*)malloc(sizeof(ALBUM));
fscanf(ptr,"%s\t%s\t%s\t%s\n%d\n",&index->TIPO,&index->AUTORE,&index->TITOLO,&index->CASA_DISCOGRAFICA,&index->NUMERO_CANZONI);
while(k<index->NUMERO_CANZONI)
{
index->ptr_canzoni=(Stringa*)malloc(index->NUMERO_CANZONI*sizeof(Stringa));
fscanf(ptr,"%s\n",&index->ptr_canzoni[k]);
k++;
}
index->NEXT=plis;
plis=index;
}
printf("L'archivio e' stato caricato in memoria\n");
fclose(ptr);
return plis;
}
Cmq grazie lo stesso.
__________________
Processore Intel Core 2 Duo E6600 ; 2 Gb di RAM DDR2 ; Scheda video RADEON X1950 XTX da 512 mb ; |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:23.



















