2013-11-03 19 views
0

好吧,我的任务是创建一个程序,它从文件中读取未知的nxn矩阵,然后以某种方式计算它的行​​列式。我已经完成了大部分工作,除了从文件中获取数字之后,这些数字似乎已经变得越来越混乱了。从C中的文件获取矩阵C

如果你只是看我的代码,这可能会更容易,这是直到阅读矩阵之后的部分,我说的值都混乱了。这不是我< =昏暗,因为昏暗从0计数,所以它应该运行正确的次数。

#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"); 
    } 

所以揭掉,如果你们能看到什么,请告诉我,我真的很新的这所以我可能失去了一些东西很明显,谢谢。

+0

你的文件在最后一行之后是否有'\ n'? – Inspired

+0

此外,最有可能不会导致你的错误,但检查'输入!=(FILE *)NULL'应执行之前的第一个循环计数行数。 – Inspired

+1

用完循环中的界限,请使用'<'而不是'<='。 – dnk

回答

2

您的循环与阵列的尺寸不匹配。

无论你的文件没有“\ n”的最后一行之后,然后你有(dim+1)*(dim+1)矩阵,应该把它定义为float matrix[dim+1][dim+1],或文件有最后一行后“\ n”,然后你应在循环中使用i < dimj < dim

+0

啊啊,谢谢!我需要将矩阵浮动为dim + 1! – Carterini