从文件中读取由换行符分隔的矩阵

时间:2019-05-20 08:45:38

标签: c

我需要以这种格式从文件中读取两个任意维度的矩阵:

1 2 4
1 3 7
9 2 4 

0 2 4 
1 5 7  
0 2 4

第二个矩阵不一定必须存在。我写了一个已经可以读取第一个矩阵的代码:

int main (int argc, char *argv[]){

    FILE *fp;
    int i, j;
    int initial_dim = 5;
    int n1 = 0; /*dimension of the first matrix*/
    int n2 = 0; /*dimension of the second matrix*/
    double A[n][n];
    double B[n][n];

    if (argc == 1){
        printf("Please enter file name\n");
        return 1;
    }

    if( (fp = fopen(argv[1], "r")) != NULL ){
        for(i=0; i < initial_dim; i++)
            for(j=0; j < initial_dim; j++)
                if (fscanf(fp, "%lf", &A[i][j]))
                    n1++;

        double x = determinant(n1, A);
        printf("Determinant: %g\n", x);        
        fclose(fp);
    }        

    else{
          printf("I can't open file %s\n", *argv);
          return 1;
    }
    return 0;
}

我需要一种跳过定界符并读取第二个矩阵的方法

1 个答案:

答案 0 :(得分:0)

我找不到写一个简短答案的方法,所以我只在这里写了可以做到这一点的代码:http://gitlab.dotty.fr/dotty/read_matrix/tree/master

我编写的代码可以从输入文件中读取任意数量的矩阵并将它们存储在结构中。而且我认为您可以修改此代码以使其与您想要轻松执行的操作相匹配。

如果您有任何疑问,请让我澄清。

下面是代码的一部分,以显示主要部分的简单程度:

int main(int argc, char *argv[])
{
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <mat_file>\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  FILE *file = fopen(argv[1], "r");
  if (file == NULL) {
    perror("fopen");
    exit(EXIT_FAILURE);
  }

  while (mat_parse_next(file))
  {
    struct matrix *mat = mat_read(file);
    mat_dump(mat);
    mat_free(mat);
  }

  fclose(file);
  return 0;
}