我的真正目标是初始化2d数组,然后调用一个函数以获取行和列的用户输入,然后将2d数组返回给用户指定大小的main。
尽管我知道不使用GetData函数来请求用户输入,而是将输入放到主函数中,我的教授要求我这样做会效率更高。
这是特定的提示:
“ GetData():编写一个函数,该函数将2D数组的引用,变量的引用作为参数,一个用于行数,另一个用于列数。在该函数中,它将行数和列数作为用户输入,并更新传递给它的变量。然后,它根据行数和列数获取矩阵的输入。“
#include <stdio.h>
void GetData(int *rows, int *columns, int matrix[][*columns]);
void Display(int rows, int columns, int matrix[][columns]);
int main(void)
{
int r1, c1, r2, c2;
int m1[r1][c1];
int m2[r2][c2];
printf("Working for Matrix 1\n");
GetData(&r1,&c1,m1);
Display(r1,c1,m1);
return 0;
}
void GetData(int *rows, int *columns, int matrix[][*columns])
{
// maybe instead of void it needs to return an integer pointer?
int a, b, i, j,k;
printf("Enter number of rows and columns: ");
scanf("%d %d",&a,&b);
*rows = a;
*columns = b;
printf("Enter data for %dx%d matrix",*rows,*columns);
for(i = 0;i<*rows;i++)
{
printf("\nrow %d\n",i+1);
for(j=0;j<*columns;j++)
{
scanf("%d",&k);
matrix[i][j] = k;
}
}
}
void Display(int rows, int columns, int matrix[][columns])
{
int i, j;
for (i=0;i<rows;i++)
{
for(j=0;j<columns;j++)
printf("%4d",matrix[i][j]);
}
}
运行此代码时,也存在分段错误,我不太确定这是什么意思或引起它的原因。
声明时:int m1[r1][c1]
,r1
和c1
被单元化。因此,编译器不知道要增大多少m1
。对于m2
同样。
[如果您使用(例如)-O2 -Wall
进行编译,则编译器会为您标记此。
您需要类似的东西:
int
main(void)
{
int r1 = 10;
int c1 = 12;
int m1[r1][c1];
int r2 = 5;
int c2 = 7;
int m2[r2][c2];
...
return 0;
}
但是,您提示用户输入GetData
中的数组维数,但这为时已晚。我会将提示移到main
:
int
main(void)
{
int nrow;
int ncol;
printf("Enter number of rows and columns: ");
scanf("%d %d", &nrow, &ncol);
int m1[nrow][ncol];
int m2[nrow][ncol];
...
return 0;
}