如何在c++中使用循环和数组进行比较和检查

How to compare and check in c++ using loops and array

本文关键字:数组 检查 比较 循环 c++      更新时间:2023-10-16

这是我的新编辑的代码,我有麻烦与我的最后的if循环的X和O的存储在一个数组内。我试图检查是否有一个X或O已经在数组内或没有。如果有,它会要求用户输入另一个输入,然后重新开始,但是当我运行程序时,会发生这样的情况:

1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number: 1
player X your number is 1
X | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number: 1
Please enter another Number2
player O your number is 1
O | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number:


char c;

        cout << "Please Enter Box Number: ";
        cin >> c;

        if (c > '9' || c < '0')
        {
            // error message
            cout << "please enter a number 1-9" << " ";
            cin >> c;
            cin.ignore(numeric_limits<int>::max(), 'n');
        }
        if (c < '9' || c > '0') 
        {
            int number = c - '0';
            if (board[number - 1] == 'X' || board[number - 1] == 'O') 
            {
                cout << "Please enter another Number";
                cin >> c;
                cin.ignore(numeric_limits<int>::max(), 'n');
            }
            else if (board[number -1] != 'X' || board[number - 1] != 'O' ) {
                if (player == 'X')
                { 
                    player = 'O';
                }
                else 
                {
                    player = 'X';
                }


                cout << "player " << player <<  " your number is " << number << endl;
                // Your implementation here...

                board[number - 1] = player;
            }

        }



    }

首先是第二个问题(最简单的一个):

Return退出当前函数。因此,在返回之后,不再执行函数中的其他指令。您应该删除return,并将其余代码(如果输入无效则不应执行)放在if的else块中。

第一个问题是:

  • 为什么要检查数组中每个位置的索引(如board[7] = '8')。你已经知道了位置,你需要在每个单元格中标记使用它的玩家;例如设置'X'(玩家1),'O'(玩家2),' '(空)的值。

  • 如果您将输入'c'转换为整数并将其用作索引,而不是9个"if",则会更容易。使用ASCII字符(我不知道这是否仍然适用于WCHAR, UTF-8等),您可以使其快速而简单:

    int k = c - '0';

    board[k] = player;


编辑:考虑检查方框是否已被使用:

int k = c - '0';
if (board[k] == ' ') {
  board[k] = player;
} else {
  cout << "This square is already used";
}

要循环返回,直到输入一个有效值为止,您可以这样做:

int number = 10;
while( ( number > 9 ) || ( number < 0 ) )
{
    std::cout << "Please Enter Box Number: ";
    std::cin >> number;
}
std::cout << "Your number is " << number << std::endl;

我不太确定你问的另一部分是什么。如果/当我这样做时,我会编辑我的回复。

http://www.asciitable.com/

如果您查看ASCII图表,您会注意到所有字符都有一个十进制值。因此,当你的老师从用户输入的内容中减去"0"时,他实际上是在做"1":

int number = (int)'1' - (int)'0'; // x will equal 1

你的数组可以使用[]符号直接访问,所以:

board[number] = player