我如何初始化没有行或列的2d数组,并创建一个接受用户输入的函数,然后更新2d数组?

问题描述 投票:0回答:1

我的真正目标是初始化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]);
        }
    }

运行此代码时,也存在分段错误,我不太确定这是什么意思或引起它的原因。

c multidimensional-array initialization scanf
1个回答
1
投票

声明时:int m1[r1][c1]r1c1单元化。因此,编译器不知道要增大多少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;
}
© www.soinside.com 2019 - 2024. All rights reserved.