c - 如何初始化没有行或列的二维数组,并创建一个接受用户输入的函数,然后更新二维数组?
问题描述
我的真正目标是初始化一个二维数组,然后调用一个函数来获取用户对行和列的输入,然后将二维数组返回给主用户指定的大小。
虽然我知道不使用 GetData 函数来请求用户输入会更有效,而是将输入放入主函数中,但我的教授要求我这样做。
这是具体的提示:
"GetData():编写一个函数,以二维数组的引用,变量的引用,一个为行数,另一个为列数作为参数。在函数中,它将行数和列数作为用户输入并更新传递给它的变量。然后它根据行数和列数获取矩阵的输入。
#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
.
如果你用 (eg)-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;
}
推荐阅读
- pyspark - 有没有办法在 PySpark 中进行二项式回归?
- clickonce - 更改 ClickOnce 应用程序的默认安装文件夹
- c# - 如何将 xml 解析为列表变量
- xml - 如何在odoo 14的打印菜单中隐藏报告?
- c# - ASP.NET Core Razor - 全局异常处理程序
- scala - 使用 HttpRequest 构建 Jenkins 管道
- bash - Bash:使用netcat“远程”调用函数,甚至可能吗?
- datetime - python 3.9.1 日期时间算法
- python - google colab 仍然没有变化:python 中的 selenium
- ios - 使用组合在 url 会话上未触发错误