float A[10][11];
но ...
void printMatrix(int numColumn, int numRow ,int matrix[numRow][numColumn]){
A 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
Я возился с другими вещами, отслеживая этот (и стандартизировал отступы вдва пробела, это ужасно мало, но непротиворечивость непоследовательности ритмов каждый раз), но я почти уверен, что единственное, что я изменил по существу, - это прототип функции, включающей измерение массива last .