C++ 如何在c++;使用循环和数组
这是我新编辑的代码,我对存储在数组中的X和O的最终if循环有问题。我试图检查数组中是否已经存在X或O。如果有一个,它会要求用户输入另一个输入,然后重新开始。但是,当我运行程序时,会发生这种情况: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
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”,而是将所有项初始化为“”)。有关在分配前检查方块状态的代码,请参阅编辑。