我试图将一个简单的TicTacToe游戏编写为C ++编程手册中的一种练习。这应该在不使用指针或向量的情况下完成,因为我只完成了数组章节。我尝试运行代码时遇到分段错误。这是我的代码..
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
void displayArray( char array[3][3] );
main ()
{
char board[][3] =
{
{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}
};
int p1;
int p2;
int j2;
int j1;
int i2;
int i1;
for ( int i = 0; i < 9; i++)
{
if( pow(-1,i) == 1 )
{
while ( board[i1][j1] != ' ')
{
cout << "Player 1 insert your indices\n";
cin >> p1 ;
i1 = floor(p1%10);
j1 = p1%10;
}
board[i1][j1] = 'X';
}
else
{
while ( board[i1][j1] != ' ')
{
cout << "Player 2 insert your indices\n";
cin >> p2 ;
i2 = floor(p2%10);
j2 = p2%10;
}
board[i1][j1] = 'O';
}
}
displayArray( board );
}
void displayArray( char array[3][3] )
{
cout << "Board :\n" ;
for ( int i = 0; i < 3; i++ )
{
cout << array[i][0] << '\t' << array[i][2] << '\t' << array[i] [2] << '\n';
}
cout << '\n' ;
}
答案 0 :(得分:0)
while ( board[i1][j1] != ' ')
i1
和j1
未初始化。因此,当您执行board[i1][j1]
时,您可能会触及未知领域。这在c ++中称为Undefined behavior
,如果您的代码执行此操作,运行时可以随意执行任何操作。对于大多数情况,它是一个分段错误。
这一部分:
while ( board[i1][j1] != ' ')
{
cout << "Player 2 insert your indices\n";
cin >> p2 ;
i2 = floor(p2%10);
j2 = p2%10;
}
是一个无限循环。你的意思是写i2
和j2
吗?