gpt4 book ai didi

C fread() 矩阵,无论矩阵大小如何,都读入九个错误值

转载 作者:行者123 更新时间:2023-11-30 14:26:41 25 4
gpt4 key购买 nike

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->行*mat->列),fptr);

正在阅读 9 个坏 double ,但我不知道为什么......

在main()中,用户指定行和列的大小等。

如果有人能解释为什么我会非常感激。

这是用于打印的函数

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;

在main()中调用matrix_readbinary()的代码

//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
}

最佳答案

我使用您发布的代码在 Windows 下使用 Visual Studio 创建了一个测试应用程序,并且运行良好。

#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <stdlib.h>

struct matrep
{
int rows,cols;
double *matrix;
};

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;
}

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 MATRIX,MATRIX1;

int _tmain(int argc, _TCHAR* argv[])
{
int r;
int c;
double* pdbl;

MATRIX.rows = 4;
MATRIX.cols = 3;
pdbl = (double*) malloc(sizeof(double) * MATRIX.rows * MATRIX.cols);
MATRIX.matrix = pdbl;
for ( r = 0; r < MATRIX.rows; ++r )
{
for ( c = 0; c < MATRIX.cols; ++c )
{
*pdbl++ = c + r;
}
}
matrix_writebinary(&MATRIX);
print_matrix(&MATRIX);
matrix_readbinary(&MATRIX1);
print_matrix(&MATRIX1);
}

关于C fread() 矩阵,无论矩阵大小如何,都读入九个错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8780572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com