结构内部的动态矩阵,C编程

结构内部的动态矩阵,C编程,c,matrix,dynamic,struct,C,Matrix,Dynamic,Struct,我需要帮助。我想学习如何创建和使用作为结构元素的动态矩阵,我想用零(0)填充矩阵并将其打印出来,我尝试了很多方法,但没有成功。这是密码 #include <stdio.h> #include <stdlib.h> typedef struct matrica { int **mat; int dim; //this is dimension of squared matrix }MATRICA; void form_matrix(MATRICA *m

我需要帮助。我想学习如何创建和使用作为结构元素的动态矩阵,我想用零(0)填充矩阵并将其打印出来,我尝试了很多方法,但没有成功。这是密码

#include <stdio.h>
#include <stdlib.h>

typedef struct matrica
{
    int **mat;
    int dim; //this is dimension of squared matrix

}MATRICA;

void form_matrix(MATRICA *matrica);

int main()
{

    MATRICA matrix;

    form_matrix(&matrix);


    return 0;
}

void form_matrix(MATRICA *matrica)
{
    int i, j;
    MATRICA *br;

    do
    {
        printf("Size of matrix ");
        scanf("%d", &br->dim);

    }while(br->dim < 4 || br->dim > 6);

    matrica->mat = (int **) calloc(br->dim, sizeof(int *));

    for(i = 0; i < br->dim; i++)
    {
        matrica->mat[i] = (int *) calloc(br->dim, sizeof(int));

        for(j = 0; j < br->dim; j++)
        {
            matrica->mat[i][j] = 0;
        }
    }

    for(i = 0; i < br->dim; i++)
        for(j = 0; j < br->dim; j++)
            printf("%d ", matrica->mat[i][j]);

}
#包括
#包括
类型定义结构矩阵
{
int**mat;
int dim;//这是平方矩阵的维数
}MATRICA;
无效形式_矩阵(矩阵*矩阵);
int main()
{
矩阵矩阵;
表格_矩阵(和矩阵);
返回0;
}
无效形式矩阵(矩阵*矩阵)
{
int i,j;
MATRICA*br;
做
{
printf(“矩阵大小”);
scanf(“%d”,&br->dim);
}而(br->dim<4 | br->dim>6);
matrica->mat=(int**)calloc(br->dim,sizeof(int*);
对于(i=0;idim;i++)
{
matrica->mat[i]=(int*)calloc(br->dim,sizeof(int));
对于(j=0;jdim;j++)
{
matrica->mat[i][j]=0;
}
}
对于(i=0;idim;i++)
对于(j=0;jdim;j++)
printf(“%d”,matrica->mat[i][j]);
}

我做错了什么,我的循环内部函数只运行一次,有人能解释一下原因吗?

您的程序显示未定义的行为,因为您正在取消对未初始化指针的引用
br
。您不需要它,只需要一个变量来存储维度输入

int i, j, dim;

do
{
    printf("Size of matrix ");
    if (scanf("%d", &dim) != 1) {
        printf("scan failed\n");
        exit(EXIT_FAILURE);
    }

}while(dim < 4 || dim > 6);

matrica->dim = dim;
/* ... replace all instances of br->dim with dim */
inti,j,dim;
做
{
printf(“矩阵大小”);
如果(扫描频率(“%d”,&dim)!=1){
printf(“扫描失败\n”);
退出(退出失败);
}
}而(dim<4 | | dim>6);
matrica->dim=dim;
/* ... 将br->dim的所有实例替换为dim*/

哪个循环?您有多个循环。第一个预期循环,初始化矩阵并用零填充时
br
的目的是什么,为什么未初始化就使用它?
MATRICA*br-->
MATRICA*br=MATRICA
br用于访问struct内部的dim OK,我理解,但我也想从struct中使用dim,这就是为什么我使用br,因为我想稍后在其他一些函数中使用dim,所以我的意思是我需要在struct中存储一个数字,以便稍后在其他一些函数中再次使用它。您看到了吗
matrica->dim=dim?啊,对不起,现在我知道发生了什么,非常感谢@jxh