If语句跳转
if statement jumping
If语句运行异常。由于某种原因,如果在if语句中if ( choosePositionX )
转到else,这告诉用户其他玩家已经移动了,那么它将转到下一个if if ( choosePositionO )
并打印出该语句中的else。我怎样才能使它在if语句中进入else时,它就会跳出来,继续往下。似乎break;
不起作用。
基本上,第一个语句中的else一旦被使用,就会转移到第二个if语句中的else。为什么?
#include <iostream>
using namespace std;
// Initialize Array to 9 elements.
// Set array elements 1 to 9 to specify locations for placement of X and O.
char ticTacBoard[9] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
// gameState will return 1 to 4. #1. Player X has won, #2. Player Y has won, #3. Draw, #4. Game Not Finished.
int gameState = 0;
int choosePositionX = 0;
int choosePositionO = 0;
int totalMoves = 0;
// Functions declared to run game.
// Checks for winners, draw and if game should continue.
int checkGameState (int gameState);
// Takes in users moves.
void makeMove ();
// Resets board when game finished.
void reset ();
// Prints the board to the user.
void printBoard ();
int main()
{
cout << "Welcome to Tic Tac Toe!" << endl << endl
<< "The goal of Tic Tac Toe is to be the first player to get three in a row on the grid." << endl << endl
<< "Please select 1 through 9 to select placement for your turn."<< endl << endl;
int gameState = 4;
printBoard();
while ( gameState == 4)
{
cout << "Player X please choose a position: ";
cin >> choosePositionX;
cout << endl;
makeMove();
totalMoves = totalMoves + 1;
printBoard();
gameState = checkGameState(gameState);
if (gameState != 4)
{
if ( gameState == 1 )
{
cout << "Player X has won the game!" << endl << endl;
break;
}
if ( gameState == 2 )
{
cout << "Player Y has won the game!" << endl << endl;
break;
}
if ( gameState == 3 )
{
cout << "The game is a DRAW!" << endl << endl;
break;
}
}
cout << "Player O please choose a position: ";
cin >> choosePositionO;
cout << endl;
makeMove();
totalMoves = totalMoves + 1;
printBoard();
gameState = checkGameState(gameState);
if (gameState != 4)
{
if ( gameState == 1 )
{
cout << "Player X has won the game!" << endl << endl;
break;
}
if ( gameState == 2 )
{
cout << "Player Y has won the game!" << endl << endl;
break;
}
if ( gameState == 3 )
{
cout << "The game is a DRAW!" << endl << endl;
break;
}
}
}
char playAgain;
cout << "Would you like to play again? y/n: ";
cin >> playAgain;
cout << endl;
if (playAgain == 'y')
{
reset();
}
else if (playAgain == 'n')
{
cout << endl;
cout << "Thanks for playing!!";
return 0;
}
return 0;
}
void reset()
{
for (int i = 0; i < 9; i++)
{
ticTacBoard[i] = 49 + i;
}
gameState = 0;
choosePositionX = 0;
choosePositionO = 0;
totalMoves = 0;
main();
}
int checkGameState(int gameState)
{
////////////// CHECK FOR X /////////////////
// Check Rows
if(ticTacBoard[0] == 'X' && ticTacBoard[1] == 'X' && ticTacBoard[2] == 'X')
{
return 1;
}
if(ticTacBoard[3] == 'X' && ticTacBoard[4] == 'X' && ticTacBoard[5] == 'X')
{
return 1;
}
if(ticTacBoard[6] == 'X' && ticTacBoard[7] == 'X' && ticTacBoard[8] == 'X')
{
return 1;
}
// Check Columns
if(ticTacBoard[0] == 'X' && ticTacBoard[3] == 'X' && ticTacBoard[6] == 'X')
{
return 1;
}
if(ticTacBoard[1] == 'X' && ticTacBoard[4] == 'X' && ticTacBoard[7] == 'X')
{
return 1;
}
if(ticTacBoard[2] == 'X' && ticTacBoard[5] == 'X' && ticTacBoard[8] == 'X')
{
return 1;
}
// Check Diagonally
if(ticTacBoard[0] == 'X' && ticTacBoard[4] == 'X' && ticTacBoard[8] == 'X')
{
return 1;
}
if(ticTacBoard[2] == 'X' && ticTacBoard[4] == 'X' && ticTacBoard[6] == 'X')
{
return 1;
}
////////////// CHECK FOR O /////////////////
// Check Rows
if(ticTacBoard[0] == 'O' && ticTacBoard[1] == 'O' && ticTacBoard[2] == 'O')
{
return 2;
}
if(ticTacBoard[3] == 'O' && ticTacBoard[4] == 'O' && ticTacBoard[5] == 'O')
{
return 2;
}
if(ticTacBoard[6] == 'O' && ticTacBoard[7] == 'O' && ticTacBoard[8] == 'O')
{
return 2;
}
// Check Columns
if(ticTacBoard[0] == 'O' && ticTacBoard[3] == 'O' && ticTacBoard[6] == 'O')
{
return 2;
}
if(ticTacBoard[1] == 'O' && ticTacBoard[4] == 'O' && ticTacBoard[7] == 'O')
{
return 2;
}
if(ticTacBoard[2] == 'O' && ticTacBoard[5] == 'O' && ticTacBoard[8] == 'O')
{
return 2;
}
// Check Diagonally
if(ticTacBoard[0] == 'O' && ticTacBoard[4] == 'O' && ticTacBoard[8] == 'O')
{
return 2;
}
if(ticTacBoard[2] == 'O' && ticTacBoard[4] == 'O' && ticTacBoard[6] == 'O')
{
return 2;
}
// After 9 moves we call a Draw. Since we should have a winner before that.
if ( totalMoves >= 9)
{
return 3;
}
// Otherwise CONTINUE
else
return 4;
}
void makeMove()
{
if (choosePositionX)
{
if (ticTacBoard[choosePositionX - 1] != 'X' && ticTacBoard[choosePositionX - 1] != 'O' )
{
ticTacBoard[choosePositionX - 1] = 'X';
}
else
{
cout << "Player O has already made this move" << endl << endl;
// keep same moves for counter draw
totalMoves = totalMoves - 1 + 1;
}
}
if (choosePositionO)
{
if (ticTacBoard[choosePositionO - 1] != 'X' && ticTacBoard[choosePositionO - 1] != 'O' )
{
ticTacBoard[choosePositionO - 1] = 'O';
}
else
{
cout << "Player X has already made this move" << endl << endl;
// keep same moves for counter draw
totalMoves = totalMoves - 1 + 1;
}
}
}
void printBoard()
{
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
cout << ticTacBoard[3 * y + x] << " ";
}
cout << endl;
}
cout << endl;
}
您忘记了连接两个if
的else
。您需要使用:
else if ( choosePositionO )
使用else if
:
if (condition1)
{
if (subcond1) { /* ... */ }
else { /* ... */ }
}
else if (condition2)
{
if (subcond2) { /* ... */ }
else { /* ... */ }
}
else
{
// ...
}
使第二个if
为else if
,因此,如果choosePositionX
为真,则checkPositionO
将不被检查。
看起来你可以只使用一个变量,如果它们是互斥的。或者更好的是enum
:
enum Player {
PlayerX
, PlayerO
};
enum Player choosePosition;
设置第二个if(choosePosition)
else if(choosePositionO)
那么你可以在
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 我似乎对if/else的基本语句有问题:/
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果中的多个语句是否与多个 if 相同?
- C++ If/Else 语句被跳过
- 使用语句if时逻辑的问题
- 如何添加语句if-else
- 如何将语句if(isalpha(c))从c++转换为MIPS ?
- 在if语句if C++中创建对象时出现作用域问题
- if语句-if/else和参数放置C++