void matrix_writebinary(struct matrep *mat) {
int i,j;
FILE *fptr;
if((fptr=fopen("matrixA.bin","wb"))==NULL)
{
puts("Cannot Open File");
}
fwrite(&mat->rows,sizeof(int),1,fptr);
fwrite(&mat->cols,sizeof(int),1,fptr);
fwrite(mat->matrix,sizeof(double),(mat->rows*mat->cols),fptr);
fclose(fptr);
}
/***********************************************************/
double *matrix_readbinary(struct matrep *mat) {
int i,j;
FILE *fptr;
if((fptr=fopen("matrixA.bin","rb"))==NULL)
{
puts("Cannot Open File");
}
fread(&mat->rows,sizeof(int),1,fptr);
fread(&mat->cols,sizeof(int),1,fptr);
mat->matrix = (double *) malloc( sizeof( double ) * (mat->rows*mat->cols) ) ;
fread(mat->matrix,sizeof(double),(mat->rows*mat->cols),fptr);
fclose(fptr);
return mat->matrix;
}
Я использую две вышеупомянутые функции для записи матрицы в двоичный файл, а затем считываю матрицу из файла, используя fread.
Затем я печатаю матрицу, но каждый разДа, первые 9 элементов матрицы равны нулю, независимо от размера mat.rows или mat.cols, всегда 9 пустых элементов или -1. # R при попытке печати, поэтому я думаю, что fread (val, sizeof(double), (mat-> row * mat-> cols), fptr);
читает в 9 плохих двойных чисел, но я понятия не имею, почему ...
В основном (), пользователь указывает размер строки и столбца и т. д.
Если кто-то может объяснить, почему я был бы очень признателен.
Вот функция, используемая для печати
void print_matrix( struct matrep *mat )
{
double *ptr ;
int i, j ;
ptr=mat->matrix;
if ( mat->matrix==0 || mat->rows==0 || mat->cols==0 )
{
printf("\n\nEmpty matrix" );
return ;
}
printf( "\n\nrows %d, columns %d\n\n", mat->rows, mat->cols) ;
for ( i=0; i < mat->rows; i++ )
{
for ( j=0; j < mat->cols; j++ )
{
printf( "%5.2lf\t", *ptr++ );
}
printf( "\n" ) ;
}
}
и используемая структура ...
struct matrep {
int rows,cols;
double *matrix;
};
struct matrep MATRIX,MATRIX1;
код, который вызывает matrix_readbinary () в main ()
//BINARY WRITE/READ
printf("\nWriting binary data now...\n");
matrix_writebinary( &MATRIX ) ;
_flushall();
getchar();
printf("\nReading binary data now...\n");
MATRIX1.matrix=matrix_readbinary(&MATRIX1 ) ; // reads above matrix from file as a copy
if(MATRIX1.matrix!=NULL){
printf("\nPrinting read .bin...\n");
print_matrix(&MATRIX1 ) ; // prints this copyed matrix
}