使用函数读取文件.txt中的矩阵

using function to read a matrix in file .txt

本文关键字:txt 文件 函数 读取      更新时间:2023-10-16

我试图使用函数读取具有矩阵 [n]x[m] 值的.txt文件,然后在我的主文件中调用它,但我遇到了一些问题......下面是读取函数:

bool read_file(int row, int column, char *file_name, float **elems)
    {
    int i, j;
    FILE *pfile;
    fopen_s(&pfile, file_name, "r");
    if (pfile == NULL) {
        return false;
    }
    fscanf_s(pfile, "%d", &row);
    fscanf_s(pfile, "%d", &column);
    //printf_s("%d %dn", row,column);
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++) {
            fscanf_s(pfile, "%f", &elems[i][j]);
            //printf("%fn", elems[i][j]);
        }
    }return true;
 }

我的程序要求我在两个矩阵之间做乘积,我必须通过 2 种类型的输入、键码或文件来完成。我在我的主 if-else 中使用了 2 个输入之间进行选择。当它进行键盘输入时,一切都会正常(动态定位以及矩阵的乘积都在工作(。然后我主要调用这样的函数:

int main(){
int i, j, row1, column1, row2, column2;
char* file_name1 = { "C:\Users\Lc\Documents\Matrix1.txt" };
char* file_name2 = { "C:\Users\Lc\Documents\Matrix2.txt" };
if (...) {
    ...
    /* Input by keybord. */ 
    ...
}     
else if(...){  /*Input by file*/
read_file(row1, column1, file_name1, matrix1);
read_file(row2, column2, file_name2, matrix2);
...
}
...

然后它说矩阵 1 和矩阵 2 是未定义的......我明白为什么它们未定义,但我的问题是我不知道如何定义它们,就像我对键盘输入所做的那样

float **elems是指向浮点数数组的指针数组的指针。 你可以通过在循环中调用 malloc(( 来创建这样的东西。

请注意它在代码中的使用方式:

fscanf_s(pfile, "%f", &elems[i][j]);

因此,elems[0..N]旨在指向行。 首先,分配外部数组:

float** elems = malloc(row * sizeof(float*));
assert(elems);

这是每行一个float*。 然后,分配每一行:

for (i = 0; i < row; i++)
{
    elems[i] = malloc(column * sizeof(float));
    assert(elems[i]);
}

现在elems指向一个初始化的float*数组,每个元素指向一个float数组(哪些数字未初始化(。