Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    3

    [C] Funzione di caricamento da file binario

    Ciao a tutti, ho un problema con una funzione di caricamento, questo mi sta bloccando da un po' di tempo.
    Ho una funzione in cui salvo i dati su un file binario, che è la seguente:

    codice:
    Info_partita salva_partita (Giocatore *array_giocatori, int turno, int num_giocatori, int carte_da_mostrare, Nodo* mazzo_intero, Nodo* incognite, int p, Info_partita informazioni){
        int i=0, j=0;
        FILE *fp=NULL;
        fp = fopen("partita.sav", "wb");
        if(fp==NULL){
            printf("\nErrore nell'apertura del FILE");
            exit(-1);
        }
        informazioni.p=p;
        informazioni.turno=turno;
        informazioni.num_giocatori=num_giocatori;
        fwrite(&informazioni.p, sizeof(int), 1, fp);
        fwrite(&informazioni.turno, sizeof(int), 1, fp);
        fwrite(&informazioni.num_giocatori, sizeof(int), 1, fp);
    
    
        informazioni.array_giocatori=array_giocatori;
        for(i=0; i<num_giocatori; i++){
            fwrite(&informazioni.array_giocatori[i].nome, sizeof(char[DIM_NOME+1]), 1, fp );
            fwrite(&informazioni.array_giocatori[i].stanza, sizeof(int), 1, fp );
            fwrite(&informazioni.array_giocatori[i].ipotesi, sizeof(int), 1, fp );
            fwrite(&informazioni.array_giocatori[i].num_carte, sizeof(int), 1, fp );
            for(j=0; j<informazioni.array_giocatori[i].num_carte; j++){
                fwrite(&informazioni.array_giocatori[i].mano[j].info.tipo, sizeof(Tipo_carta), 1, fp);
                fwrite(&informazioni.array_giocatori[i].mano[j].info.nome_carta, sizeof(char[DIM_DESCRIZIONE+1]), 1, fp);
            }
        }
        informazioni.carte_da_mostrare=carte_da_mostrare;
        fwrite(&informazioni.carte_da_mostrare, sizeof(int), 1, fp);
        informazioni.mazzo_intero=mazzo_intero;
        for(i=0; i<informazioni.carte_da_mostrare; i++){
            fwrite(&informazioni.mazzo_intero[i].info.tipo, sizeof(Tipo_carta), 1, fp);
            fwrite(&informazioni.mazzo_intero[i].info.nome_carta, sizeof(char[DIM_DESCRIZIONE+1]), 1, fp);
        }
        informazioni.incognite=incognite;
        for(i=0; i<NUM_INCOGNITE; i++){
            fwrite(&informazioni.incognite[i].info.tipo, sizeof(Tipo_carta), 1, fp);
            fwrite(&informazioni.incognite[i].info.nome_carta, sizeof(char[DIM_DESCRIZIONE+1]), 1, fp);
        }
        fclose(fp);//chiude il file
        return informazioni;
    }
    
    
    Successivamente vorrei caricare i dati salvati se l'utente lo richiede con questa funzione:
    
    
    Info_partita carica_partita (Info_partita informazioni){
        int i=0, j=0;
        FILE *fp=NULL;
        fp = fopen("partita.sav", "rb");
        if(fp==NULL){//controlla che l'apertura del file sia andata a buon fine, eventualmente stampa l'errore e esce
            printf("\nErrore nella letture del FILE");
            exit(-1);
        }
        fread(&informazioni.p, sizeof(int), 1, fp);
        fread(&informazioni.turno, sizeof(int), 1, fp);
        fread(&informazioni.num_giocatori, sizeof(int), 1, fp);
        for(i=0; i<informazioni.num_giocatori; i++){
            fread(&informazioni.array_giocatori->nome, sizeof(char[DIM_NOME+1]), 1, fp );
            fread(&informazioni.array_giocatori->stanza, sizeof(int), 1, fp );
            fread(&informazioni.array_giocatori[i].ipotesi, sizeof(int), 1, fp );
            fread(&informazioni.array_giocatori[i].num_carte, sizeof(int), 1, fp );
            for(j=0; j<informazioni.array_giocatori[i].num_carte; j++){
                fread(&informazioni.array_giocatori[i].mano[j].info.tipo, sizeof(Tipo_carta), 1, fp);
                fread(&informazioni.array_giocatori[i].mano[j].info.nome_carta, sizeof(char[DIM_DESCRIZIONE+1]), 1, fp);
            }
        }
        fread(&informazioni.carte_da_mostrare, sizeof(int), 1, fp);
        for(i=0; i<informazioni.carte_da_mostrare; i++){
            fread(&informazioni.mazzo_intero[i].info.tipo, sizeof(Tipo_carta), 1, fp);
            fread(&informazioni.mazzo_intero[i].info.nome_carta, sizeof(char[DIM_DESCRIZIONE+1]), 1, fp);
        }
        for(i=0; i<NUM_INCOGNITE; i++){
            fread(&informazioni.incognite->info.tipo, sizeof(Tipo_carta), 1, fp);
            fread(&informazioni.incognite->info.nome_carta, sizeof(char[DIM_DESCRIZIONE+1]), 1, fp);
        }
        return informazioni;
    }
    ma appena entra nel primo ciclo for, si interrompe.
    premetto che 3 campi di questa struttura "Info_partita informazioni", hanno delle liste al loro interno.
    Il campo array_giocatori è un puntatore di un tipo che è una struttura, contenente diversi campi tra i quali una lista;
    il campo mazzo_intero è una lista che contiene una info che è una struttura con 2 campi;
    idem come sopra per il campo incognite.
    Vi sarei grato se mi aiutaste a risolvere il problema, grazie anticipatamente.
    Ultima modifica di alka; 02-03-2018 a 18:09 Motivo: Formattazione del codice

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Certo che non è bello postare da un'altra parte mentre ti sto aiutando nell'altro forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    3
    Ciao, scusami, io ho postato anche qui perchè necessito di una mano in tempi rapidi sperando in una risposta al più presto. Per me questa discussione allora può pure essere rimossa. Scusami ma non ho postato anche qui per mancanza di fiducia, infatti se guardi gli orari del primo post, coincidono. Ripeto, puoi anche rimuovere la discussione.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Io non rimuovo nulla, il forum non è mica mio ...

    I forum non assicurano nessuna risposta, tanto meno in tempi certi.

    Di sicuro, questo tipo di comportamenti non è gradito e finisce per non farti avere più nessun aiuto, almeno da parte mia.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    3
    Mi dispiace, io non ho mai postato in un forum, mi serviva una mano solo per questa cosa, quindi ho pensato di scrivere in 2 forum contemporaneamente. Grazie lo stesso.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.