gpt4 book ai didi

c - fscanf 从文本文件读取二维 double 组时出现问题

转载 作者:行者123 更新时间:2023-11-30 15:52:44 25 4
gpt4 key购买 nike

我在 C 中使用 fscanf 时遇到一些问题。我已将随机矩阵写入文件,现在尝试将文本文件中的数据读入另一个矩阵。它似乎可以很好地读取行数和列数,但它会返回数据值零。我完全陷入困境,所以任何帮助将不胜感激!

我的 MATRIX 结构声明为

typedef struct matrep {
unsigned rows, columns;
double *data;
}MATRIX;

我的文件如下所示:

rows = 5, columns = 10

-99.75 12.72 -61.34 61.75 17.00 -4.03 -29.94 79.19 64.57 49.32
-65.18 71.79 42.10 2.71 -39.20 -97.00 -81.72 -27.11 -70.54 -66.82
97.71 -10.86 -76.18 -99.07 -98.22 -24.42 6.33 14.24 20.35 21.43
-66.75 32.61 -9.84 -29.58 -88.59 21.54 56.66 60.52 3.98 -39.61
75.19 45.34 91.18 85.14 7.87 -71.53 -7.58 -52.93 72.45 -58.08

这是我的matrix_read函数:

MATRIX matrix_read(char file_name[15])
{
int i,j, m, n;
MATRIX B;
FILE *filep;
double *ptr = NULL;
double x;

if((filep = fopen("matrixA.txt", "r"))==NULL)
{
printf("\nFailed to open File.\n");
}
if(fscanf(filep, "\n\nrows = %u, columns = %u\n\n", &m, &n) != 2)
{
printf( "Failed to read dimensions\n");
B.data = 0;
B.columns = 0;
B.rows = 0;
}
B.data = (double *)malloc(B.columns*B.rows*sizeof(double));
if(B.data ==0)
{
printf("Failed to allocate memory");
}

fscanf(filep,"\n\nrows = %u, columns = %u\n\n",&m,&n);
rewind(filep);

ptr = B.data;

for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{

if (fscanf(filep, " %5.2lf", &x) != 1)
{
printf("Failed to read element [ %d,%d ]\n", i, j);
B.data = 0;
B.columns = 0;
B.rows = 0;
}
printf("%5.2lf\t", x);
*ptr++ = x;
}
}

B.rows=m;
B.columns=n;
return B;
fclose(filep);
free(ptr);
}

谢谢!

最佳答案

您有几个问题,其中一个是@simonc 指出的,另一个可能是:读取 filep 中的列和行后倒回

rewind() 将与流关联的位置指示器设置为文件的开头,您正在再次阅读rows = 5, columns = 10

最后:

B.data = (double *)malloc(B.columns*B.rows*sizeof(double)); /* Don't cast malloc */
if(B.data ==0)
{
printf("Failed to allocate memory");
/* You have to return or exit here */
}

关于c - fscanf 从文本文件读取二维 double 组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14236642/

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