Home > Blockchain >  My 2d array is being assigned the wrong values
My 2d array is being assigned the wrong values

Time:04-21

Im trying to write a function to populate a 2D array with random values between min and max. However, it's only properly giving the values to the first row and garbage values to the rest.

Here's the code:

#include <stdio.h>
#define COL 100
#include <stdlib.h>

void PopulateArray2D(int Mat[][100], unsigned int rowsize, unsigned int colsize, int min, 
int max);

int main(){
    int Mat[5][5];
    PopulateArray2D(Mat,5,5,1,10);

    for(int i=0;i<5;i  ){//prints 2d array
        for(int j=0;j<5;j  ){
            printf("%d ",Mat[i][j]);
        }
        printf("\n");
    }
}

void PopulateArray2D(int Mat[][100], unsigned int rowsize, unsigned int colsize, int min, 
    int max){//puts random values into the array
    int randNum = 0;
    for(int i=0;i<rowsize;i  ){
        for(int j=0;j<colsize;j  ){
            randNum = rand()%(max-min   1)   min;
            Mat[i][j] = randNum;
        }
    }
}

Output was:

4 7 8 6 4 
22032 15775231 0 194 0 
673948839 32766 673948838 32766 1067381581 
22032 -1714622520 32694 1067381504 22032 
0 0 1067380928 22032 673949104

CodePudding user response:

You are using pointers of incompatible types.

Within the function main the array is declared like

int Mat[5][5];

but in the function PopulateArray2D it is declared like

void PopulateArray2D(int Mat[][100], unsigned int rowsize, unsigned int colsize, int min, 
    int max);

So this is the problem. That is the array used as an argument of the function is implicitly converted to the type int ( * )[5] while the function parameter is adjusted to the pointer type int ( * )[100].

Either declare the function like

void PopulateArray2D(int Mat[][5], unsigned int rowsize, unsigned int colsize, int min, 
    int max);

Or if the compiler supports variable length arrays then declare the function like

void PopulateArray2D( unsigned int rowsize, unsigned int colsize, int Mat[][colsize], int min, 
    int max);

and call it like

PopulateArray2D(5,5,Mat,1,10);

CodePudding user response:

you can check this https://www.codegrepper.com/code-examples/cpp/two dimensional array A[N,M] with the random numbers from 10 to 90.

See your declaration of the function

  • Related