ABanerjee
ABanerjee

Reputation: 195

2 Dimensional Array printing messed up

I was making a program that will print out the periodic table with [ ] for an element, and [*] for the element you're searching for...

 void printmap(int x, int y)
{
    int a, b, table[9][18] = {
        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
        1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
        1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 
        0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 
    };   // 0 - Empty, 1 - [ ], 2 - [*]

    table[x][y] = 2;
        b = 0;
    printf("\n*******************\n\n");
    for( a = 1, printf("  \t"); a < 19; a++)
    {
        printf("%3d", (b + a));
    }
    printf("\n");
    for(a = 0; a < 9; a++)
    {
        printf("\n%2d\t", a + 1);
        for(b = 0; b < 18; b++)
        {
            switch(table[a][b])
            {
                case 0 :
                printf("   ");

                case 1 : 
                printf("[ ]");
                break;

                case 2 : 
                printf("[*]");
                break;

                default : 
                printf("");
            }
        }
    }
}

For some reason, the output is messed up... ( If I pass the argument for helium, which should be 0 and 18 this is what I get : http://pastebin.com/YjhjzSi8

What am I doing wrong? Thank you

Upvotes: 0

Views: 94

Answers (3)

ChuckCottrill
ChuckCottrill

Reputation: 4444

As the other respondents have said, you need to initialize your table array correctly.

Also, you have missed a "break" in your switch/case statemet, and you also missed printing a newline at the end of each row. I took the liberty of renaming your variables a,b to row,col and fixed your code, this should do what you want,

void printmap(int x, int y)
{
    int row=0, col=0;
    int was = table[x][y];
    table[x][y] = 2;

    col = 0;
    printf("\n*******************\n\n");
    printf("  \t");
    row=0; //you were not initializing row
        for( col = 0; col < 18; col++)
        {
            printf("%3d", (col+row+1));
        }
    printf("\n");
    for(row = 0; row < 9; row++)
    {
        printf("\n%2d\t", row + 1);
        char* rc = "   ";
        for(col = 0; col < 18; col++)
        {
            switch(table[row][col])
            {
            case 0 : rc=("   "); break; //was missing break
            case 1 : rc=("[ ]"); break;
            case 2 : rc=("[*]"); break;
            default: rc=("   "); break; //was missing break
            }
            printf("%s",rc);
        }
        printf("\n"); //missing print newline
    }
    table[x][y] = was;
}

And here is the table, as others have suggested,

int table[9][18] = {
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 },
    { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
    { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }
};  // 0=Empty, 1=[ ], 2=[*]

Upvotes: 2

Brendan Hill
Brendan Hill

Reputation: 3752

Been a while since I used C++, but, this is not how you initialize a 2D array. In fact I'm surprised it even compiles. Correct way is something like:

table[0] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
table[1] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1};
table[2] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1};
...

Another example: 2D array values C++

Upvotes: 2

Paul Samsotha
Paul Samsotha

Reputation: 209062

That's not a 2D array, just because you make it LOOK like a 2D array, doesn't mean it is one.

This what you have

 table[9][18] = {
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
    ...
    0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
 };

You should add more brackets accordingly

 table[9][18] = {
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 
    {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1),
    ....
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}};

Upvotes: 2

Related Questions