用C语言从文件中获取矩阵

用C语言从文件中获取矩阵,c,matrix,C,Matrix,我的任务是创建一个程序,从文件中读取未知的nxn矩阵,然后以某种方式计算它的行列式。我已经差不多做完了,只是从档案中取出的数字看起来乱七八糟 如果你只看我的代码可能会更容易,这是直到刚刚阅读完矩阵之后的部分,正如我所说的,这些值都是混乱的。不是i循环与数组的维度不匹配 您的文件在最后一行之后没有'\n',然后您的矩阵是(dim+1)*(dim+1),应该将其定义为浮动矩阵[dim+1][dim+1],或者文件在最后一行之后有'\n',然后你应该在循环中使用i

我的任务是创建一个程序,从文件中读取未知的nxn矩阵,然后以某种方式计算它的行列式。我已经差不多做完了,只是从档案中取出的数字看起来乱七八糟


如果你只看我的代码可能会更容易,这是直到刚刚阅读完矩阵之后的部分,正如我所说的,这些值都是混乱的。不是i循环与数组的维度不匹配


您的文件在最后一行之后没有'\n',然后您的矩阵是
(dim+1)*(dim+1)
,应该将其定义为
浮动矩阵[dim+1][dim+1]
,或者文件在最后一行之后有'\n',然后你应该在循环中使用
i
j

你的文件在最后一行后面有“\n”吗?同样,这很可能不会导致错误,但是检查
输入!=(FILE*)NULL
应该在第一个循环之前执行,该循环计算行数。如果循环超出了界限,请使用“我没有超出界限,不是这样,我已经测试过了,只是尝试了输入,但没有改变任何东西。”。我知道错误发生在这一点上,虽然。如果它不是一个巨大的文件,它可能是一个更好的主意,读取整个文件到一个缓冲区,然后从那里计算出你的尺寸等。你应该避免文件处理,如果可能的话。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main(int argc, char* argv[])
{
FILE       *input;
int     i, j, temp; 
int        dim=0;
double     det;
const char inp_fn[]="matrix.dat";

/*Open File*/
input = fopen(inp_fn, "r");

/*Find the number of lines and hence dimensions*/
while (EOF != (temp = fgetc(input)))
{
    if (temp=='\n')
    {
    ++dim;
    }
}

/*Reset pointer to beginning of file and float the matrix*/
fseek(input, 0, SEEK_SET);
float      matrix[dim][dim];

/*Check file isn't NULL, if good fill the matrix with the values from the file*/
if( (input != (FILE*) NULL) )
{
    for(i=0; i<=dim; i++)
    {
        for(j=0; j<=dim; j++)
        {
            fscanf(input, "%f", &matrix[i][j]);
        }
    }
    fclose(input);
}
else
    {
    printf("Could not open file!\n");
    }