Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] - Implementazione funzioni I/O su Matrici

    Salve a tutti,

    ho la necessità per completare un progetto universitario di implementare alcune funzioni che mi permettano di salvare delle matrici su file, e poi di andarle a rileggere e caricarle in memoria.

    Chiedo il vostro aiuto in quanto l'argomento I/O su file non è stato trattato nel corso.

    Comunque io per la scrittura su file ho pensato ad una cosa del genere:

    codice:
    int writeFile(char *pathFile,int var){ 
    FILE *my_file; 
    my_file = fopen(pathFile, "a"); 
    if(my_file){ 
    fprintf(my_file,"%d",var); 
    return 1;
    }else{ 
    return 0; 
     } 
    }
     
    void writeMatrix(char *pathFile,int **Matrice,int righe,int colonne){ 
    int i,j; 
    for(i = 0;i<righe;i++){ 
     for(j = 0;j<colonne;j++){ 
       if(writeFile(pathFile,Matrice[i][j])); 
             } 
          } 
      }
    Il codice funziona, il problema è quando devo andare a ripescare la Matrice per caricarla in memoria, per allocare memoria per la matrice ho bisogno del numero delle righe e delle colonne, che nel momento precedente della scrittura su file posso tranquillamente scriverlo, ma dopo come andare a riprenderlo?

    Ho un po di problemi nel riuscire a distinguere(nel momento della lettura) quello che ho precedentemente scritto su file, potreste darmi qualche indicazione a riguardo?

    Grazie, Emanuele

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Basta che quando scrivi la matrice, prima scrivi il numero di righe e di colonne:

    Per ricostruire la matrice:

    codice:
    fscanf(file, "%d", &righe);
    fscanf(file, "%d", &colonne);
    
    matrice[righe][colonne]; //fallo con l'allocazione dinamica, non avevo sbatta di scriverla xD
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  3. #3
    Innanzi tutto grazie per la risposta

    dunque ho seguito il tuo consiglio, quando vado a salvare la matrice, prima salvo il numero delle righe e delle colonne.

    Poi ho fatto questa funzione che dovrebbe tirarmi fuori la matrice:
    codice:
    int **loadMatrice(char *pathFile, int *righe,int *colonne){
    FILE *my_file; 
    my_file = fopen(pathFile,"r"); 
    int **Matrice; 
    int i,j; 
    if(my_file){ 
    fscanf(my_file,"%d",righe); 
    fscanf(my_file,"%d",colonne); 
    Matrice = allocaMemoriaMatrice(*righe,*colonne); 
    if(Matrice != NULL){ 
    for(i = 0; i < *righe; i++){ 
       for(j = 0;j < *colonne; j++){ 
         fscanf(my_file,"%d",&Matrice[i][j]); 
            /* Matrice[i][j] = 1 ok */ 
                 } 
           } 
       } 
    return Matrice; 
    
     }else{ 
    return 0; 
    } 
    }
    dove
    codice:
    allocaMemoriaMatrice(int righe,int colonne)
    è una funzione che alloca dinamicamente la memoria per una matrice, il problema è questo:

    se assegno staticamente(come nel commento) un valore alla matrice funziona alla perfezione, se invece utilizzo
    codice:
    fscanf(my_file,"%d",&Matrice[i][j]);
    quando vado a visualizzare la matrice escono fuori tutti valori sballati...eppure il numero delle righe e delle colonne viene correttamente letto e assegnato ai valori righe e colonne(ho testato).

    Dove sto sbagliando..?

    Grazie ancora per la pazienza..

  4. #4
    Ho risolto, mi ero scordato di chiudere gli stream...ciao

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