Il problema che ho riscontrato è che nel file che ho aperto in modalità scrittura (wb) e nel quale vado a scrivere gli elementi (0 oppure 1) che ho caricato nella matrice statica non mi appare niente, o meglio, mi appare qualcosa ma non riesco a capire che c'è scritto......
allora ho dichiarato un altro puntatore a file che mi permette di aprire un altro file in modalità lettura, solo che in questo file non viene scritto nulla.....
quale potrrebbe essere il problema?
è possibile che non ho lavorato con la matrice statica?
Vi espongo il programma realizzato dal sottoscritto!!!
/*dichiarare una matrice quadrata statica nel main;
1. caricare in essa dei valori;
2. provare a scriverla in un file binario;
3. provare a leggerla dallo stesso file binario.*/
#include <stdio.h>
#include <stdlib.h>
#define RIGHE 5 /* righe della matrice */
#define COLONNE 5 /* colonne della matrice */
void carica (int, int);
int scrivi_in_file_binario (FILE *, int, int, int);
int leggi_su_file_binario (FILE *, int, int, int);
main()
{
int elementi_scritti = 0;
int elementi_letti = 0;
FILE *fpb1, *fpb2;
int matrice[RIGHE][COLONNE]; /* dichiarazione della matrice 5 X 5*/
int c; /* numero colonne effettivamente utilizzate */
int r; /* numero righe effettivamente utilizzate */
printf("ESERCITAZIONE\n\n");
printf("Dimmi quante righe vuoi utilizzare: ");
scanf("%d", &r);
printf("Dimmi quante colonne vuoi utilizzare: ");
scanf("%d", &c);
carica(r, c);
printf ("La dimensione della matrice e' %d!\n\n", sizeof(matrice));
fpb1 = fopen ("file_binario.dat", "wb");
if (fpb1 == NULL)
printf ("Non e' possibile scrivere su file!!!\n");
else
{
elementi_scritti = scrivi_in_file_binario (fpb1, matrice, r, c);
printf ("Gli elementi effettivamente scritti tramite la funzione fwrite() sono: %d\n\n", elementi_scritti);
rewind (fpb1);
fpb2 = fopen ("file_binario2.dat", "rb+");
if (fpb2 == NULL)
printf ("Non e' possibile leggere su file!\n");
else
{
elementi_letti = leggi_su_file_binario (fpb1, matrice, r, c);
printf ("Gli elementi effettivamente letti tramite la funzione fread() sono: %d\n\n", elementi_letti);
}
}
}
void carica(int A, int B)
{
int mat[RIGHE][COLONNE];
int i; /* indice per scorrere le righe */
int j; /* indice per scorrere le colonne */
for (i=0; i < A; i++)
for (j=0; j < B; j++)
{
printf ("Dammi l'elemento su riga [%d] colonna [%d]: ", i, j);
scanf ("%d", &mat[j]);
}
}
int scrivi_in_file_binario (FILE *A, int mat[][COLONNE], int B, int C)
{
int i, j;
for (i=0; i < B; i++)
{
for (j=0; j < C; j++)
{
fwrite (&mat, 4, B*C, A);
}
}
return sizeof (mat);
}
int leggi_su_file_binario (FILE *A, int mat[][COLONNE], int B, int C)
{
int i, j;
for (i=0; i < B; i++)
{
for (j=0; j < C; j++)
{
fread (mat, 4, B*C, A);
}
}
return sizeof (mat);
}