Чтение матриц, разделенных новой строкой из файла - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно прочитать две матрицы любого измерения из файла в этом формате:

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 голосов
/ 21 мая 2019

Я не смог найти способ написать короткий ответ, поэтому я просто написал код, который сделает это здесь: 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...