我有一個需要存儲在二維數組中的文件,以便我可以對其執行矩陣運算。我所知道的是,雙打將空格和換行,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