У меня есть файл, который мне нужно сохранить в двумерном массиве, чтобы я мог выполнять над ним матричные операции.Все, что я знаю, это то, что двойники будут разделены пробелами и переносами строк, например:
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 двойников.