C++ 如何在c++;使用循环和数组

C++ 如何在c++;使用循环和数组,c++,arrays,loops,C++,Arrays,Loops,这是我新编辑的代码,我对存储在数组中的X和O的最终if循环有问题。我试图检查数组中是否已经存在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

这是我新编辑的代码,我对存储在数组中的X和O的最终if循环有问题。我试图检查数组中是否已经存在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;

            }


        }







    }
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
请输入框号:1
玩家X你的号码是1
X | 2 | 3
4 | 5 | 6
7 | 8 | 9
请输入框号:1
请输入另一个数字2
你的号码是1
O | 2 | 3
4 | 5 | 6
7 | 8 | 9
请输入框号:
字符c;
cout>c;
如果(c>'9'| | c<'0')
{
//错误消息
coutc;
cin.ignore(数值限制::max(),'\n');
}
如果(c<'9'| c>'0')
{
整数=c-‘0’;
如果(电路板[编号-1]='X'| |电路板[编号-1]=='O')
{
cout>c;
cin.ignore(数值限制::max(),'\n');
}
else if(板[number-1]!='X'| |板[number-1]!='O'){
如果(玩家=='X')
{ 
玩家='O';
}
其他的
{
玩家='X';
}

cout要在输入有效值之前循环,可以执行以下操作:

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;
int number=10;
而((数字>9)| |(数字<0))
{
std::cout>number;
}
std::cout第一个问题是第二个问题(简单的问题):

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

第一个问题:

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

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

    int k=c-'0';

    board[k]=玩家;


编辑: 考虑到检查广场是否尚未使用:

int k = c - '0';
if (board[k] == ' ') {
  board[k] = player;
} else {
  cout << "This square is already used";
}
intk=c-'0';
如果(电路板[k]=''){
棋盘[k]=玩家;
}否则{
cout

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

int number = (int)'1' - (int)'0'; // x will equal 1
然后可以使用[]符号直接访问阵列,因此:

board[number] = player

想一想如何利用字符“0”到“9”的ASCII值都是顺序的这一事实。也就是说,类似“8”-“4”的值将变成实际的整数4。我甚至没有注意到
return
语句。很好!如果你代表玩家X、玩家O和空方块,你应该使用字符“X”、“O”或“”表示每个方块的状态(不将“1”分配给数组中的项“9”,而是将所有项初始化为“”)。有关在分配前检查方块状态的代码,请参阅编辑。