2016-02-07 2 views
0

Я пишу функцию в c, которая, учитывая размерность d квадратной матрицы, хранящейся в пути к файлу f, считывает целые числа в одномерный массив m размера d * d.Как читать матрицу целых чисел из файла в C?

Образец файла sample.dat может быть:

10 20 30 
12 24 36 
1 2 3 

Моя функция:

void readMatrix(int d, char *f, int *m) { 
      FILE *fp; 
      int i = 0; 
      fp = fopen(f, "r"); 
      while (i<d*d) { 
        fscanf(fp, "%d ", &m[i]); 
        i++; 
        printf("%d\n", m[i]); 
      } 
    } 

Однако, когда я запускаю эту функцию, все мои выходы 0:

Dimension: 3  Filename: sample.dat 
0 
0 
0 
0 
0 
0 
0 
0 
0 

Что что я здесь делаю не так?

ответ

1

Многие проблемы очень мало кода

  1. Вы никогда не проверить, сделал ли файл открытым.
  2. Вы никогда не проверяли, удалось ли fscanf().
  3. Вы увеличиваете i до printf(), таким образом печатая следующий элемент вместо тока.
  4. Вы никогда не делали fclose() открытого файла.

Правильный путь, возможно, делает это

void readMatrix(int dimension, char *path, int *data) 
{ 
    FILE *file; 
    file = fopen(path, "r"); 
    if (file == NULL) 
    { 
     fprintf(stderr, "error: while trying to open `%s' for reading\n", path); 
     return; // 
    } 

    for (int i = 0 ; ((i < dimension * dimension) && (fscanf(file, "%d ", &data[i]) == 1)) ; ++i) 
     printf("data[%d] = %d\n", i, data[i]); 

    fclose(file); 
} 
+0

Спасибо так много! Приращение перед печатью решило проблему. – hazrmard

Смежные вопросы