Salvataggio e caricamento di tabelle su/da file

di il
4 risposte

Salvataggio e caricamento di tabelle su/da file

Salve a tutti, sono di nuovo qui a chiedere il vostro aiuto
Devo scrivere un programma che gestisca i tavoli di un ristorante, usando le tabelle. Ora, quando salvo la tabella dei tavoli su un file e la carico, mi escono dei numeri strani ò.ò Onestamente non me lo riesco a spiegare, quindi se poteste aiutarmi, mi fareste un immenso piacere
Vi lascio i due stralci di codice relativi al salvataggio della tabella sul file e al caricamento della stessa. Se necessario successivamente upperò tutto il programma ç__ç
int salva_tabella_su_file (TipoTabella t, char *nmf) {
FILE *f;
int i;

f=fopen(nmf, "w");
if(f==NULL) {
   printf("Errore.\n");
   return 0;
}

fprintf(f, "%d", t.quanti_tavoli);

for(i=0; i < t.quanti_tavoli; i++) {
   fprintf(f, "%s", t.array_tavoli[i].numTavolo);
   fprintf(f, "%d", t.array_tavoli[i].persone);
   fprintf(f, "%d", t.array_tavoli[i].ora_arrivo.ora);
   fprintf(f, "%d", t.array_tavoli[i].ora_arrivo.min);
   fprintf(f, "%g", t.array_tavoli[i].conto.antipasti);
   fprintf(f, "%g", t.array_tavoli[i].conto.primi);
   fprintf(f, "%g", t.array_tavoli[i].conto.secondi);
   fprintf(f, "%g", t.array_tavoli[i].conto.altro);
}

fclose(f);
return 1;
}
int tabella_da_File(TipoTabella *t, char *nmf) {
FILE *fin;
int i;
char buf[MAXLUNG];

fin = fopen(nmf, "r");
if(fin==NULL) {
   printf("Errore.\n");
   return 0;             
   }
   
fscanf(fin, "%d\n", &(t->quanti_tavoli));

for(i = 0; i < t->quanti_tavoli; i++) {
   fscanf(fin, "%s", buf);
   t->array_tavoli[i].numTavolo = (char *)malloc(strlen(buf) + 1);
   if(t->array_tavoli[i].numTavolo == NULL) {
      printf("Errore.\n");
      return 0;
      }
   else strcpy(t->array_tavoli[i].numTavolo, buf);
   
   fscanf(fin, "%d", &(t->array_tavoli[i].persone));
   fscanf(fin, "%d", &(t->array_tavoli[i].ora_arrivo.ora));        
   fscanf(fin, "%d", &(t->array_tavoli[i].ora_arrivo.min));
   fscanf(fin, "%lf", &(t->array_tavoli[i].conto.antipasti));
   fscanf(fin, "%lf", &(t->array_tavoli[i].conto.primi));
   fscanf(fin, "%lf", &(t->array_tavoli[i].conto.secondi));
   fscanf(fin, "%lf", &(t->array_tavoli[i].conto.altro));
   }
   
fclose(fin);
return 1;
}

4 Risposte

  • Re: Salvataggio e caricamento di tabelle su/da file

    Per facilitare le risposte, mostra le strutture usate.

    Già che ci sei, mostra anche il main, per capire come allochi

    TipoTabella *t

    passata alla funzione di lettura
  • Re: Salvataggio e caricamento di tabelle su/da file

    Strutture:
    char *numeritavolo[] = {"Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove", "Dieci"};
    
    typedef struct {int ora, min;}TipoOra;
    
    typedef struct {
       double antipasti, primi, secondi, altro;
       }TipoConto;
       
    typedef struct {
       char *numTavolo;
       int persone;
       TipoOra ora_arrivo;
       TipoConto conto;
    }TipoTavolo;
    
    typedef struct {
       TipoTavolo array_tavoli[MAXTAVOLI];
       int quanti_tavoli;
    }TipoTabella;
    main:
    int main(){
       TipoTabella tab;
       int riuscita, scelta;
       char buffer[15];
       double conto;
       
       tab.quanti_tavoli=0;
       
       
       printf("Programma per la gestione dei tavoli. Scegli un'opzione.\n");
       
       do{
          printf("1 - Aggiunta di un Tavolo;\n2 - Elimina Tavolo;\n3 - Modifica di un conto;\n4 - Calcola e stampa un conto;\n5 - Stampa tavolo;\n6 - Stampa tabella;\n7 - Salva Tabella su file\n8 - Carica tabella da un file;\n0 - Termina\n");
          scanf("%d", &scelta);
          
          switch(scelta) {
             case 1:
                riuscita = aggiungi_tavolo(&tab);
                if(!riuscita) printf("Errore.\n");
                else printf("Aggiunta avvenuta con successo.\n");
                break;
             case 2:
                printf("Numero del tavolo da eliminare?\n");
                scanf("%s", buffer);
                riuscita = elimina_tavolo(&tab, buffer);
                if(!riuscita) printf("Errore.\n");
                else printf("Eliminazione avvenuta con successo.\n");
                break;
             case 3:
                printf("Numero del tavolo di cui si desidera modificare il conto?\n");
                scanf("%s", buffer);
                riuscita = aggiungi_al_conto(&tab, buffer);
                if(!riuscita) printf("Errore.\n");
                else printf("Aggiunta avvenuta con successo.\n");
                break;
          
             case 4: 
                printf("Numero del tavolo di cui si vuole stampare il conto? Da Uno a Dieci\n");
                scanf("%s", buffer);
                stampa_conto(tab, buffer);
                break;
             case 5:
                printf("Numero del tavolo di cui si vogliono stampare le info.? Da Uno a Dieci\n");
                scanf("%s", buffer);
                stampa_tavolo(tab, buffer);
                break;
             case 6:
                stampa_tabella(tab);
                break;
             case 7:
                printf("Nome del file in cui salvare la tabella?\n");
                scanf("%s", buffer);
                riuscita = salva_tabella_su_file(tab, buffer);
                if(!riuscita) printf("Errore.\n");
                else printf("Salvataggio avvenuto con successo.\n");
                break;
             case 8:
                printf("Nome del file da cui caricare la tabella?\n");
                scanf("%s", buffer);
                riuscita = tabella_da_File(&tab, buffer);
                if(!riuscita) printf("Errore.\n");
                else printf("Caricamento avvenuto con successo.\n");
                break;
             case 0:
                printf("Fine programma.\n");
                break;
             default:
                printf("Opzione non disponibile.\n");
                } /*Fine switch*/
          } while(scelta!=0); /*fine do...while*/   
          
       system("PAUSE");
       return 0;
    }
  • Re: Salvataggio e caricamento di tabelle su/da file

    Mi sa che il problema è che nelle fprintf manca il \n per andare a capo. Deve essere

    fprintf(f, "%d\n", t.quanti_tavoli);

    e in tutte le altre fprintf

    Ma l'avevi mai aperto il file dei dati registrati?
  • Re: Salvataggio e caricamento di tabelle su/da file

    Mhm, onestamente no ò.ò Anche perchè il mio professore, guardando l'esercizio, mi ha detto: è tutto sbagliato! e allora cercavo errori più di sostanza lol Che testa bacata
Devi accedere o registrarti per scrivere nel forum
4 risposte