печать матрицы из файла


Я использую этот код для загрузки матрицы:

 FILE *inputMatrix=fopen("file","r");
 fscanf(inputMatrix,"%d",&num);
 for(i=0;i<num;++i){
    for(j=0;j<num+1;++j){
        fscanf(inputMatrix,"%f",&A[i][j]);
    }
 }
 fclose(inputMatrix);
 int numRow=num;
 int numColumn=num+1;

А затем я хочу распечатать его в main методом printMatrix:

void printMatrix(int numColumn, int numRow ,int matrix[numRow][numColumn]){
   int i = 0, j = 0;
   printf("nc: %i, nr: %in",numColumn,numRow);
    for(i = 0 ; i < numRow ; i++)
    {
        for(j = 0 ; j < numColumn ; j++)
        {
            printf("%.2f  ", matrix[i][j]);
        }
        printf("n");
    }
    printf("n");
}

Вот в чем вопрос. Когда я использую в main: printf("matrix[1][1] is %f",matrix[1][1]) => он успешно загружается из файла,но когда я пытаюсь распечатать его своим методом, который также печатает, я получаю 0.00 за каждый кусок в матрице. - Почему же? Я что, пропустил какую-то ссылку?

4 2

4 ответа:

float A[10][11];

Но...

void printMatrix(int numColumn, int numRow ,int matrix[numRow][numColumn]){

Определение float, но метод ожидает массив int. Я ошарашен этим компилированным, но gcc скинул достаточно предупреждений, которые должны дать одну паузу:

$ gcc -o 5448492 5448492.c 
5448492.c:30: warning: conflicting types for ‘printMatrix’
5448492.c:24: note: previous implicit declaration of ‘printMatrix’ was here
5448492.c: In function ‘printMatrix’:
5448492.c:37: warning: format ‘%.2f’ expects type ‘double’, but argument 2 has type ‘int’
Поскольку C требует, чтобы во время компиляции были известны все индексы массива , кроме первого индекса массива, можно сделать функцию программы, объявив прототип для printMatrix(), который включает в себя размер индекса массива last. (Я ошибся в своем комментарии. Извиняюсь.)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printMatrix(int numColumn, int numRow ,float matrix[][11]);

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

  int num;
  int i,j;
  float A[10][11];

  FILE *inputMatrix=fopen("yourfile.in","r");
  fscanf(inputMatrix,"%d",&num);
  int numRow=num;
  int numColumn=num+1;

  for(i=0;i<numRow;++i){
     for(j=0;j<numColumn;++j){
         fscanf(inputMatrix,"%f",&A[i][j]);
     }
  }
  fclose(inputMatrix);

  printMatrix(numColumn,numRow,A);

  return 0;
}


void printMatrix(int numColumn, int numRow ,float matrix[][11]){
   int i = 0, j = 0;
   printf("nc: %i, nr: %i\n",numColumn,numRow);
     for(i = 0 ; i < numRow ; i++)
     {
       for(j = 0 ; j < numColumn ; j++)
       {
         printf("%f  ", matrix[i][j]);
       }
       printf("\n");
     }
     printf("\n");
}

И вывод:

$ ./5448492 
nc: 3, nr: 2
1.000000  1.000000  3.000000  
2.000000  2.000000  5.000000  

Я возился с другими вещами, отслеживая этот (и стандартизировал отступы в двух пространствах; это ужасно мало, но согласованность на нелюбимом бьет непоследовательность каждый раз), но я почти уверен, что единственное, что я изменил по существу, был прототип функции, чтобы включить последнее измерение массива.

Может быть, вы должны использовать double или float тип для массива матрицы.

У вас есть целочисленная матрица, поэтому вы должны использовать %d вместо %f / %.2f для сканирования / печати

Поскольку вы используете массив 10x11, 11 должен быть жестко закодирован и в других местах. При передаче такого многомерного массива все измерения, кроме самого высокого, должны быть жестко закодированы. В противном случае вы получите ошибочные результаты.

Причина в том, что ваши функции думают, что массив имеет столбцы numColumn, но массив в памяти на самом деле имеет 11 столбцов.

Я бы внес следующие изменения:

include ...
...

-- note the *float** and the **[11]**
void printMatrix(int numColumn, int numRow ,float matrix[][11]);

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

  int num;
  int i,j;
  float A[10][11];  
...
}

-- note the *float** and the **[11]**
void printMatrix(int numColumn, int numRow ,float matrix[][11]){
...
}