2016-07-26 2 views
1

Мне нужна помощь. Я хочу научиться создавать и использовать динамическую матрицу, которая является элементом структуры, я хочу заполнить матрицу нулями (0) и распечатать ее, я пробовал много способов, но не повезло. Вот кодДинамическая матрица внутри структуры, программирование на C

#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]); 

} 

Что я делаю неправильно, моя функция внутри цикла идет только один раз, может кто-нибудь объяснить мне, почему?

+0

какой цикл? у вас есть несколько циклов. –

+0

первый намеченный цикл, при инициализации матрицы и заполнении нулями – TheNemesis584

+2

Какова цель 'br', и почему вы используете ее неинициализированным? – jxh

ответ

1

Ваша программа обнаруживает неопределенное поведение, потому что вы разыскиваете неинициализированный указатель 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 */ 
+0

Хорошо, я это понимаю, но я также хочу использовать dim из struct, поэтому я использовал Я хотел бы использовать dim позже в некоторых других функциях, поэтому я имел в виду, что мне нужно сохранить число внутри структуры, поэтому я могу использовать его позже позже в некоторой другой функции. – TheNemesis584

+0

Вы видели 'matrica-> dim = dim; '? – jxh

+0

ах, извините, теперь я вижу, что произошло, большое спасибо @jxh – TheNemesis584

Смежные вопросы