I'm writing a tic tac toe program that plays throuh the terminal/console After Player 1 or 2 wins, I give the choice for the user to play again, 1 = play again, 2 to quit. However, entering 2 to quit doesnt work
//tie check, replay, use pointer notation
#include <iostream>
using namespace std;
void initialize(char [][3]);
void player1(char [][3]);
void player2(char [][3]);
void display(char [][3]);
char check(char [3][3]);
int main()
{
char board[3][3];
char end = '*';
int row1, column1, row2,column2;
bool replay = true;
//replay loop
do
{
//set board to *
initialize(board);
//game loop
display(board);
do
{
//player 1 turn
player1(board);
//check if player 1 won
end = check(board);
if(end != '*')
{
int input;
/* winner!*/
cout << "Player 1 Won!\n";
do
{
cout << "Play Again?\n1.Yes\n2.No\nEnter 1 or 2: ";
cin >> input;
if (input > 2 || input < 1)
cout << "Invalid Option\n";
}while(input > 2 || input < 1);
switch (input)
{
case '1':
replay = true;
break;
case '2':
cout << "Thank you for playing.\n";
exit(0);
break;
}
}
//player 2 turn
player2(board);
//check if player 2 won
end = check(board);
if (end == 'O')
{
int input;
/* winner!*/
cout << "Player 2 Won!\n";
do
{
cout << "Play Again?\n1.Yes\n2.No\nEnter 1 or 2: ";
cin >> input;
if (input > 2 || input < 1)
cout << "Invalid Option\n";
}while(input > 2 || input < 1);
switch (input)
{
case '1':
replay = true;
break;
case '2':
cout << "Thank you for playing.\n开发者_运维技巧";
exit(0);
break;
}
}
}while (end == '*');
}while (replay == true);
return 0;
}
void initialize(char array[][3])
{
for (int i = 0;i < 3;i++)
{
for (int j = 0;j < 3;j++)
array[i][j] = '*';
}
cout << "New Game\n";
}
void player1(char array[][3])
{
int row1, column1;
cout << "Player 1\nRow: ";
cin >> row1;
while (row1 < 0 || row1 > 2)
{
cout << "Enter a number between 0 and 2 for Row:: ";
cin >> row1;
}
cout << "Column: ";
cin >> column1;
while (column1 < 0 || column1 > 2)
{
cout << "Enter a number between 0 and 2 for Column: ";
cin >> column1;
}
if (array[row1][column1] == '*')
array[row1][column1] = 'X';
else
{
cout << "Space Occupied\n";
player1(array);
}
display(array);
}
void player2(char array[][3])
{
int row2,column2;
cout << "Player 2\nRow: ";
cin >> row2;
while (row2 < 0 || row2 > 2)
{
cout << "Enter a number between 0 and 2 for Row: ";
cin >> row2;
}
cout << "Column: ";
cin >> column2;
while (column2 < 0 || column2 > 2)
{
cout << "Enter a number between 0 and 2 for Column: ";
cin >> column2;
}
if (array[row2][column2] == '*')
array[row2][column2] = 'O';
else
{
cout << "Space Occupied\n";
player2(array);
}
display(array);
}
void display(char array[][3])
{
for (int x = 0;x < 3;x++)
{
for (int y = 0;y < 3;y++)
cout << array[x][y] << " ";
cout << endl;
}
}
char check(char array[3][3])
{
int i;
/* check rows */
for(i=0; i<3; i++)
if(array[i][0] == array[i][1] && array[i][0] == array[i][2])
return array[i][0];
/* check columns */
for(i=0; i<3; i++)
if(array[0][i] == array[1][i] && array[0][i] == array[2][i])
return array[0][i];
/* test diagonals */
if(array[0][0] == array[1][1] && array[1][1] == array[2][2])
return array[0][0];
if(array[0][2] == array[1][1] && array[1][1] == array[2][0])
return array[0][2];
return '*';
}
It looks like your switch statement has character literal values ('1' and '2') rather than int values of 1 and 2.
精彩评论