C ++程序不会退出,使用switch case

时间:2009-11-03 01:27:11

标签: c++ switch-statement

我正在编写一个播放终端/控制台的tic tac toe程序 在玩家1或2获胜后,我选择让用户再次玩,1 =再玩,2退出。 但是,输入2退出不起作用

//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 '*';
}

1 个答案:

答案 0 :(得分:8)

看起来你的switch语句有字符文字值('1'和'2')而不是int值1和2.