C 蒂克塔克托印刷奖得主
我想和两个玩家玩一个井字游戏。我离得相当远,而且它在很大程度上起作用。我不知道如何打印存储在数组中的字符串。我见过很多循环作为例子。请告诉我发生了什么事 在这里输入代码C 蒂克塔克托印刷奖得主,c,arrays,string,printf,tic-tac-toe,C,Arrays,String,Printf,Tic Tac Toe,我想和两个玩家玩一个井字游戏。我离得相当远,而且它在很大程度上起作用。我不知道如何打印存储在数组中的字符串。我见过很多循环作为例子。请告诉我发生了什么事 在这里输入代码 int main() { time_t t; char player1 [23]; char player2 [23]; int Let; int Turns = 0; printf("\n Welcome to Galactic Tic Tac Toe:\n"); printf("\n Plea
int main()
{ time_t t;
char player1 [23];
char player2 [23];
int Let;
int Turns = 0;
printf("\n Welcome to Galactic Tic Tac Toe:\n");
printf("\n Please enter player 1's name");
fgets(player1, 22, stdin);
printf("\nPlayer 2's name?\n");
fgets(player2, 22, stdin);
void winner (char board [][9], char player1 [][23], char player2 [][23]){
if (board [0][0] && board [0][1] && board [0][2] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][3] && board [0][4] && board [0][5] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][6] && board [0][7] && board [0][8] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][0] && board [0][1] && board [0][2] == 'O'){printf("\nPlayer 2 has won\n Congratulations : %s ", player2);}
if (board [0][3] && board [0][4] && board [0][5] == 'O'){printf("\nPlayer 2 has won\n Congratulations : %s ", player2);}
if (board [0][6] && board [0][7] && board [0][8] == 'O'){printf("\nPlayer 2 has won\n Congratulations : %s ", player2);}
if (board [0][0] && board [0][5] && board [0][8] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][2] && board [0][5] && board [0][7] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][0] && board [0][5] && board [0][8] == 'O'){printf("\nPlayer 1 has won\n Congratulations : %s ", player2);}
if (board [0][2] && board [0][5] && board [0][7] == 'O'){printf("\nPlayer 1 has won\n Congratulations : %s ", player2);}
}
你最大的问题是:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
这和你想象的不一样。您可能会假设这会检查这三个空格是否都用'X'
标记。这是不正确的
&&
是一个布尔AND运算符,这意味着左侧和右侧运算符(独立地)作为布尔运算符进行计算。所以你写的意思是:
if ( // if
board[0][0] // board[0][0] is non-zero
&& // and
board[0][1] // board[0][1] is non-zero
&& // and
board[0][2] == 'X' // board[0][2] is equal to 'X'
)
您还没有显示如何初始化电路板(可能是使用空格'
),但是存储在那里的任何(可打印)字符都将被计算为布尔真
所以这个表达式应该是:
关于下一个问题:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
老实说,我一直没有真正理解打印循环以及为什么它们通常用于阵列
其实根本就没有打印环。只有循环。如果愿意,可以在循环中调用printf
为了理解为什么我们需要循环,考虑一个不同的TiC Tac趾板,其中板是100×100。那么你的“有人赢了吗?”逻辑是什么样的呢
很容易看出,编码if(board[0][0]…board[99][99]
和所有可能的组合很快就会让人疲惫不堪。另一方面,计算机喜欢重复做相同(或类似)的任务。这取决于人(你)确保精力花在有用的东西上。你最大的问题是:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
这与您认为的不一样。您可能认为这会检查这三个空格是否都用'X'
标记。这是不正确的
&&
是一个布尔AND运算符,这意味着左侧和右侧的运算符(独立地)作为布尔运算符进行计算。因此,您所写的内容意味着:
if ( // if
board[0][0] // board[0][0] is non-zero
&& // and
board[0][1] // board[0][1] is non-zero
&& // and
board[0][2] == 'X' // board[0][2] is equal to 'X'
)
您还没有显示如何初始化电路板(可能是使用空格'
),但是存储在那里的任何(可打印)字符都将被计算为布尔真
所以这个表达式应该是:
关于下一个问题:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
老实说,我一直没有真正理解打印循环以及为什么它们通常用于阵列
没有打印循环。只有循环。如果愿意,可以在循环中调用printf
为了理解为什么我们需要循环,考虑一个不同的TiC Tac趾板,其中板是100×100。你的“某人赢了吗?”逻辑看起来像这样?
很容易看出,编码if(board[0][0]…board[99][99]
和所有可能的组合很快就会让人疲惫不堪。另一方面,计算机喜欢重复做相同(或类似)的任务。这取决于人(你)确保精力花在有用的东西上。你最大的问题是:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
这与您认为的不一样。您可能认为这会检查这三个空格是否都用'X'
标记。这是不正确的
&&
是一个布尔AND运算符,这意味着左侧和右侧的运算符(独立地)作为布尔运算符进行计算。因此,您所写的内容意味着:
if ( // if
board[0][0] // board[0][0] is non-zero
&& // and
board[0][1] // board[0][1] is non-zero
&& // and
board[0][2] == 'X' // board[0][2] is equal to 'X'
)
您还没有显示如何初始化电路板(可能是使用空格'
),但是存储在那里的任何(可打印)字符都将被计算为布尔真
所以这个表达式应该是:
关于下一个问题:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
老实说,我一直没有真正理解打印循环以及为什么它们通常用于阵列
没有打印循环。只有循环。如果愿意,可以在循环中调用printf
为了理解为什么我们需要循环,考虑一个不同的TiC Tac趾板,其中板是100×100。你的“某人赢了吗?”逻辑看起来像这样?
很容易看出,编码if(board[0][0]…board[99][99]
和所有可能的组合很快就会让人疲惫不堪。另一方面,计算机喜欢重复做相同(或类似)的任务。这取决于人(你)确保精力花在有用的东西上。你最大的问题是:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
这与您认为的不一样。您可能认为这会检查这三个空格是否都用'X'
标记。这是不正确的
&&
是一个布尔AND运算符,这意味着左侧和右侧的运算符(独立地)作为布尔运算符进行计算。因此,您所写的内容意味着:
if ( // if
board[0][0] // board[0][0] is non-zero
&& // and
board[0][1] // board[0][1] is non-zero
&& // and
board[0][2] == 'X' // board[0][2] is equal to 'X'
)
您还没有显示如何初始化电路板(可能是使用空格'
),但是存储在那里的任何(可打印)字符都将被计算为布尔真
所以这个表达式应该是:
关于下一个问题:
if (board [0][0] && board [0][1] && board [0][2] == 'X')
老实说,我一直没有真正理解打印循环以及为什么它们通常用于阵列
没有打印循环。只有循环。如果愿意,可以在循环中调用printf
为了理解为什么我们需要循环,考虑一个不同的TiC Tac趾板,其中板是100×100。你的“某人赢了吗?”逻辑看起来像这样?
很容易看出,编码
if(board[0][0]…board[99][99]
和所有可能的组合很快就会让人疲惫不堪。另一方面,计算机喜欢重复做相同(或类似)的任务。这取决于人(你)确保精力花在有用的东西上。我认为你在printf上有问题,因为player1和player2是char**但printf需要char*我认为你在printf上有问题,因为