Why is this array not printing in 2D?

``````#include <iostream>
#include <iomanip>
using namespace std;

const int COLS = 5;
const int ROWS = 5;
void showArray(int [][COLS], int);
void arrayDef(int [][COLS], int);
void totalCol(int [][COLS], int);
void totalRow(int [][COLS], int);
void totalDiag(int [][COLS], int);
void inputAmt(int [][COLS], int, int, int);
void inputZ(int [][COLS], int, int);
double rTotal = 0;
int cTotal = 0;
int diagTotal= 0;
void gameWinner(int [][COLS]);

int main()
{
int array[ROWS][COLS] = {{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0}};
int input;
int rowNumber;
int inRow = 0;
int inCol = 0;
int zRow = 0;
int zCol = 0;
int diag = 0;

int colNumber = 0;

{
cout << "1: Print the Square" << endl; // DONE
cout << "2: Input a number" << endl;  //DONE
cout << "3: Clear a square" << endl;  //DONE
cout << "4: Total a Row" << endl;	//DONE
cout << "5: Total a Column" << endl;  //DONE
cout << "6: Total a diagonal" << endl;   //DONE
cout << "7: Check for a Win" << endl;  //DONE
cout << "8: Reset the game" << endl;  //DONE
cout << "9: Exit the game" << endl;  //DONE

{
cout<< "Here is the current square: " << endl;
showArray(array, ROWS);
}

{
cout << "Enter Row: " ;
cin >> inRow;
cout << "Enter Column: ";
cin >> inCol;
cout << "Enter the amount: ";
cin >> input;
while(input < 1 or input > 25)
{
cout<< "Invalid";
cin >> input;
}
inputAmt(array, inRow, inCol, input);

}

{
cout << "Enter Row: " ;
cin >> zRow;
cout << "Enter Column: ";
cin >> zCol;
inputZ(array, zRow, zCol);
}

{
cout << "Enter Row to total: ";
cin >> rowNumber;
totalRow(array, rowNumber);

}

{
cout << "Enter Column to total: ";
cin >> colNumber;
totalCol(array, colNumber);
}

{
cout << "To total top-left to bottom right diagonal ( \ ), press 1: " << endl;
cout << "To total top-right to bottom left diagonal, ( / ) press 2: " << endl;
cin >> diag;
totalDiag(array, diag);
}

{
cout << "Checking for Win" << endl;
gameWinner(array);

}

{
cout << "Are you sure you want to reset? Y or N?";
{
cout << "Here is your blank square..." << endl;
arrayDef(array, ROWS);

}

{

}
{
cout << "Invalid, please retry: ";
}
}

}

return 0;
}

void showArray(int array[][COLS], int rows)
{

for (int x = 0; x < rows; x++)
{
for (int y = 0; y < COLS; y++)
{
cout << setw(4)  << array[x][y];
}

}
}

void arrayDef(int array[][COLS], int ROWS)
{
for (int x = 0; x < ROWS; x++)
{
for (int y = 0; y < COLS; y++)
{
array[x][y] = 0;
}
}

}

void inputAmt(int array[][COLS], int inRow, int inCol, int input)
{
array[inRow - 1][inCol - 1] = input;
cout << input << endl;

}

void totalRow(int array[][COLS], int rowNumber)
{
if (rowNumber == 1)
{
rTotal = array[0][0]+ array[0][1] + array[0][2] + array[0][3] + array[0][4];
cout << "Row Total: " << rTotal << endl;
}

if (rowNumber == 2)
{
rTotal = array[1][0]+ array[1][1] + array[1][2] + array[1][3] + array[1][4];
cout << "Row Total: " << rTotal<< endl;
}

if (rowNumber == 3)
{
rTotal = array[2][0]+ array[2][1] + array[2][2] + array[2][3] + array[2][4];
cout << "Row Total: " << rTotal<< endl;
}

if (rowNumber == 4)
{
rTotal = array[3][0]+ array[3][1] + array[3][2] + array[3][3] + array[3][4];
cout << "Row Total: " << rTotal<< endl;
}

if (rowNumber == 5)
{
rTotal = array[4][0]+ array[4][1] + array[4][2] + array[4][3] + array[4][4];
cout << "Row Total: " << rTotal<< endl;
}

}

void totalCol(int array[][COLS], int colNumber)
{
if (colNumber == 1)
{
cTotal = array[0][0]+ array[1][0] + array[2][0] + array[3][0] + array[4][0];
cout << "Column Total: " << cTotal << endl;
}
if (colNumber == 2)
{
cTotal = array[0][1]+ array[1][1] + array[2][1] + array[3][1] + array[4][1];
cout << "Column Total: " << cTotal << endl;
}
if (colNumber == 3)
{
cTotal = array[0][2]+ array[1][2] + array[2][2] + array[3][2] + array[4][2];
cout << "Column Total: " << cTotal << endl;
}
if (colNumber == 4)
{
cTotal = array[0][3]+ array[1][3] + array[2][3] + array[3][3] + array[4][3];
cout << "Column Total: " << cTotal << endl;
}
if (colNumber == 5)
{
cTotal = array[0][4]+ array[1][4] + array[2][4] + array[3][4] + array[4][4];
cout << "Column Total: " << cTotal << endl;
}
}

void inputZ(int array[][COLS], int zRow, int zCol)
{
array[zRow - 1][zCol - 1] = 0;

}

void totalDiag(int array[][COLS], int diag)
{

if(diag == 1)
{
diagTotal = array[0][0]+ array[1][1] + array[2][2] + array[3][3] + array[4][4];
cout << "Diagonal total: " << diagTotal <<endl;
}

if(diag ==2)
{
diagTotal = array[4][0]+ array[3][1] + array[2][2] + array[1][3] + array[0][4];
cout << "Diagonal total: " << diagTotal <<endl;
}
}

void gameWinner(int array[][COLS])
{
int row1 = array[0][0]+ array[0][1] + array[0][2] + array[0][3] + array[0][4];
int row2 = array[1][0]+ array[1][1] + array[1][2] + array[1][3] + array[1][4];
int row3 = array[2][0]+ array[2][1] + array[2][2] + array[2][3] + array[2][4];
int row4 = array[3][0]+ array[3][1] + array[3][2] + array[3][3] + array[3][4];
int row5 = array[4][0]+ array[4][1] + array[4][2] + array[4][3] + array[4][4];
int col1 = array[0][0]+ array[1][0] + array[2][0] + array[3][0] + array[4][0];
int col2 = array[0][1]+ array[1][1] + array[2][1] + array[3][1] + array[4][1];
int col3 = array[0][2]+ array[1][2] + array[2][2] + array[3][2] + array[4][2];
int col4 = array[0][3]+ array[1][3] + array[2][3] + array[3][3] + array[4][3];
int col5 = array[0][4]+ array[1][4] + array[2][4] + array[3][4] + array[4][4];
int diag1 = array[0][0]+ array[1][1] + array[2][2] + array[3][3] + array[4][4];
int diag2 = array[4][0]+ array[3][1] + array[2][2] + array[1][3] + array[0][4];

if(row1 ==65 && row2 ==65&& row3 ==65 &&row4 ==65 &&row5 ==65 &&col1 ==65 &&col2 ==65 &&col3==65 &&col4==65 &&col5==65 &&diag1 ==65 &&diag2==65)
{

cout << "You Win"<< endl;
}
}``````
3
Contributors
2
Replies
3
Views
9 Years
Discussion Span
Last Post by Clockowl

This program shouldn't run at all. Check this:

``````int menu;
[...]

You're using the variable 'menu' without it being initialized. That could (and probably will) crash your program.
Change the initialization to give it a initial value: `int menu=0;` Another thing: the word 'or' isn't used in standard c++. Change it to || (two pipes)

Now for your original question "Why is this array not printing in 2D?"
If you look at your 'showArray' function, you can see that you use 2 nested loops correctly to loop through your 2d array. But you have to keep in mind that 2d-array's aren't stored as a big squares in the memory, that's just how we humans describe something 2d :) Think about it: How would it store a 5-d array? (they are legal to use in C++)

So you'll have to tell your program to jump to another line after each row is done. This can be done by adding one line to your function:

``````void showArray(int array[][COLS], int rows)
{
for (int x = 0; x < rows; x++)
{
for (int y = 0; y < COLS; y++)
{
cout << setw(4)  << array[x][y];
}
cout << '\n'; // print a 'newline'
}
}``````

You used defines in C++, most people look down on that for the reason that you can also use (static) const unsigned ints in your case. It has the benefit of type checking.

The array initialization is okay with the brackets, but if you make it a loop you won't have to update it manually each time. Maybe you can read up about memset().

The menu decision part now consists of if... if... It's more natural to make that a switch statement.

All of these tips won't have impact on the output of the program, but they are useful nonetheless.

Horribly off topic, what game is this? X in a row? Sudoku? The rest is looking good. :)

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.