Per evitare di creare confusione adesso posto tutto il codice e spiego meglio.
Questo è tutto il codice, ho una lista e devo prevedere il salvataggio e il caricamento della stessa su/da file.codice:#include <stdio.h> #include <string.h> #include <malloc.h> FILE *p; struct alunno { char nome[20]; char cognome[20]; char titolo[30]; struct alunno * succ; }; struct alunno * ins_ord(struct alunno * t, char nome[], char cognome[], char titolo[]){ struct alunno * tmp = t; struct alunno * p; p = (struct alunno *) malloc(sizeof(struct alunno)); if( tmp == NULL || (strcmp(cognome, (*tmp).cognome) == -1)){ strcpy((*p).cognome, cognome); strcpy((*p).nome, nome); strcpy((*p).titolo, titolo); (*p).succ = t; return(p); } else{ while((*tmp).succ != NULL) { tmp = (*tmp).succ; } if(strcmp(cognome, (*tmp).cognome) > 0){ strcpy((*p).cognome, cognome); strcpy((*p).nome, nome); strcpy((*p).titolo, titolo); (*p).succ = NULL; (*tmp).succ = p; return(t); } else{ tmp = t; while(!(strcmp(cognome, (*tmp).cognome) > 0 && strcmp(cognome, (*(*tmp).succ).cognome) < 0)) tmp = (*tmp).succ; strcpy((*p).cognome, cognome); strcpy((*p).nome, nome); strcpy((*p).titolo, titolo); (*p).succ = (*tmp).succ; (*tmp).succ = p; return(t); } } } void salva_file(struct alunno *t){ p = fopen("file.txt", "w"); while(t != NULL){ fprintf(p, "%s ", (*t).cognome); fprintf(p, "%s \n", (*t).nome); fprintf(p, "%s \n", (*t).titolo); puts((*t).cognome); t = (*t).succ; } puts("\nDati salvati\n"); fclose(p); } struct alunno * cancella(struct alunno * t){ char cognome[20]; struct alunno* p = t; struct alunno* testa = t; puts("cognome di chi cancellare:"); fflush(stdin); gets(cognome); fflush(stdin); t = (*t).succ; while(t != NULL){ if(strcmp((*t).cognome, cognome) == 0){ (*p).succ = (*t).succ; } p = (*p).succ; t = (*t).succ; } return(testa); } struct alunno* carica(){ struct alunno * t; p = fopen("file.txt", "r"); int c = 1; char nome[20]; char cognome[20]; char titolo[30]; while (!feof(p)) { if(c == 1) { fscanf(p, "%s", nome); c++; } if(c == 2) { fscanf(p, "%s", cognome); c++; } if(c == 3) { fscanf(p, "%s", titolo); t = ins_ord(t, nome, cognome, titolo); c = 1; } } return(t); } void main() { int scelta = 9; struct alunno* testa = NULL; char nome [20]; char cognome [20]; char titolo[30]; while(scelta > 0) { puts("1) Carica dati da file\n2) Salva dati su file\n3) Inserisci nuovo prestito\n4) Cancella prestito\n0) Esci\n\n"); scanf("%d", &scelta); if(scelta == 1) { testa = carica(); } if(scelta == 2) { salva_file(testa); } if(scelta == 3) { puts("Inserisci il nome"); fflush(stdin); gets(nome); puts("Inserisci il cognome"); fflush(stdin); gets(cognome); puts("Inserisci il titolo"); fflush(stdin); gets(titolo); testa = ins_ord(testa, nome, cognome, titolo); } if(scelta == 4) { testa = cancella(testa); } } }
Praticamente io ho già creato la funzione di salvataggio e funziona (è abbastanza semplice in fondo), ma non ho idea di come fare il caricamento, perché sul file gli elementi si presentano in questo modo:
Nome Cognome Libro
Nome1 Cognome1 Libro1
Nome2 Cognome2 Libro2
ecc..
E non so come fare perché fossero tutti la stessa cosa metterei uno fscanf fino alla fine del file e salverei da qualche parte ogni volta che si ripete il ciclo, mentre io dovrei fare che la prima volta prende il nome, la seconda il cognome e la terza il libro e così a ripetersi fino alla fine del file.
Il codice che ho scritto io non funziona.

Rispondi quotando