首页 > 解决方案 > 如何初始化没有行或列的二维数组,并创建一个接受用户输入的函数,然后更新二维数组?

问题描述

我的真正目标是初始化一个二维数组,然后调用一个函数来获取用户对行和列的输入,然后将二维数组返回给主用户指定的大小。

虽然我知道不使用 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]);
        }
    }

运行此代码时,还会出现分段错误,我不太确定这意味着什么或导致它的原因。

标签: cmultidimensional-arrayinitializationscanf

解决方案


当你声明: 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;
}

推荐阅读