AlexUnskilled
AlexUnskilled

Reputation: 41

Automatically filling an array

I want to define two variables called x and y. Depending on that the program shall fill the array from 0 to x and from 0 to y.

I tried filling it with a for and it's kind of working, but I can't print it out properly.

#include <stdio.h>

#define x 4
#define y 4

void build(){
    int i=0, k=0;
    int matrix[x][y];

    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            matrix[i][k] = i;
            matrix[i][k] = k;
        }
    }

    printf("\t\n%d\n", matrix[x][y]);
}

I expect an array looking like this in the console.

0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3

Upvotes: 1

Views: 1107

Answers (3)

Andy_101
Andy_101

Reputation: 1306

You see, in order to print an array you will have to loop over the whole data. You can't print an array in that simple a way in C.
What your code is printing is a garbage value, because at index 4,4 your array has no value. Its indexes go from 0,1..3 in both x and y direction.

Hope it helps.

#include <stdio.h>
#define x 4
#define y 4

void main(){
    int i=0, k=0;
    int matrix[x][y];

    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            matrix[i][k] = i ;
        }
    }
     for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            printf("\t%d", matrix[i][k]);
        }
        printf("\n");
    }

}

Upvotes: 4

Yunnosch
Yunnosch

Reputation: 26753

I have tried to guess at your misunderstandings and commented and edited your code to make an explanation of how it works and what you need to understand.

#include <stdio.h>

#define x 4
#define y 4

void build(){
    int i=0, k=0;
    int matrix[x][y]; // top allowed indexes are x-1 and y-1

    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            matrix[i][k] = i; // first write getting ignored/overridden by next
            matrix[i][k] = k;

            // printing here gets you many values, note the removed \n
            printf("\t%d", matrix[i][k]);
        }
        // printing line break here gets you lines instead of single values
        printf("\n");
    }

    // not inside any loop, so only one %d value gets printed
    // printf("\t\n%d\n", matrix[x][y]); // accessing beyond both dimension
    // also your attempt to let printf figure out how to print the whole 2D array,
    // at least that is what I think you try, does not work in C    
}

Upvotes: 0

haccks
haccks

Reputation: 106092

In C there is no way to print an array in one go. You have to loop through each element of the array and print it.

for(int i = 0; i < x; ++i){
    for(int j = 0; j < y; ++j){
         printf("%d ", matrix[i][j]);
    }
    printf("\n");
}

Upvotes: 0

Related Questions