我有一个需要存储在二维数组中的文件,以便我可以对其执行矩阵运算。我所知道的是,双打将空格和换行,e.g分开:如何将数据文件输入到二维数组中
2.04 3.0 4.0
5.0 6.1 7.0
8.0 9.03 10.0
我不知道有多少数字会有,所以我需要一个可扩展的分析功能。到目前为止,我有:
int main(int argc, char* argv[])
{
FILE *fp;
char ch;
fp = fopen("matrix.dat","r");
if (fp == NULL)
{
puts ("Cannot open source file");
}
/*count the number of lines*/
int lines=1;
char c;
while((c = fgetc(fp)) != EOF)
{
if(c == '\n')
lines++;
}
printf("lines= %i\n",lines);
/*reopen the file to reset the pointer*/
fclose(fp);
fp = fopen("matrix.dat","r");
double m[lines][lines];
/*Load file into array*/
int i,j;
for(i=0;i<lines;i++)
{
for(j=0;j<lines;j++)
{
fscanf(fp, "%lf", &(m[i][j]));
}
fscanf(fp, "\n", NULL);
}
/*print out stored matrix*/
for(i=0;i<lines;i++)
{
for(j=0;j<lines;j++)
{
printf("%lf ",m[i][j]);
}
printf("\n");
}
}
我用这种方法的问题是
这使得该行的数量等于每行双打,这可能不是真实的数字假定**。
文件中缺少的双精度将导致程序将错误的矩阵加载到内存中(其余值偏移1)。
我目前正在将文件加载到内存两次以计算行数。
有没有更合理的方法将这些数据输入到二维数组中?我需要确保输入矩阵是正方形的,并且我的程序可以处理任何顺序的矩形矩阵。我对C很陌生,所以示例和命名函数将会非常感谢:)(对于不好的缩进的道歉)
**对不起,我想要一些错误处理,即确保输入是除非有nxn双打才能被接受。
当你说你的矩阵是正方形的时,你肯定会一直收到n^2个数字?但是你不确定它们是否沿线平均分布? –
数字应该在示例中进行格式化,程序计算矩阵的逆矩阵,所以如果文件中的矩阵不是正方形,那么程序应该退出,因为没有什么可做的。数字*应该*均匀分布,但我想确保程序不接受任何不是nxn的东西。如果一行有n-1个数字,那么我不希望程序将缺少的数字视为0,它应该终止。 – Chironex