gpt4 book ai didi

c - 阻止 Tic Tac Toe 覆盖 C 中的 Action

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:25 25 4
gpt4 key购买 nike

抱歉,我几个小时前刚问了一个问题,但这是我完成项目所需要做的最后一件事。我的程序允许覆盖移动。就像说如果玩家 1 选择第一个方 block ,它将允许玩家 2 也选择这个方 block 。其他所有功能都完美无缺我只是在执行此操作时失败了。

有什么想法吗?我只放了一部分代码,因为很遗憾,我的很多代码都是复制粘贴的。我真的很新,所以我还没有想出优化方法,而且我已经没有时间参加这个项目了,所以我们将不胜感激。

所以在这段代码中,我只包含了原始棋盘的打印和第一位玩家的第一步(如果有 2 个人)。这应该足以获得帮助,但如果有人想查看其余代码,请告诉我,因为我已经省略了大部分代码。谢谢!!!

#include <stdio.h>
#include <stdlib.h>

/* known bugs: Allows players to place a 1 or 2 on board even if there is already a 1 or 2 in that spot. */

int main()
{
char board[3][3];
int i,j,k,l, player, move;

for(i=0;i<=3;i++) // prints initial board of 0's
{
for(j=0;j<=3;j++)
{
board[i][j] = '0';
}
}


printf("Hello! Do you want to play alone or with a computer? \n\n"
"Enter 1 for alone or 2 to play with a friend!\n");
scanf("%d", &player);

if (player == 2)
{
for(k=0;k<9;k++) // 9 moves max.
{
printf("\n\n"); // print board again.
printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);

do
{
printf("Player 1, where would you like to move? Enter 1-9\n");
scanf("%d", &move);

if (move == 1)
board[0][0] = '1';
if (move == 2)
board[0][1] = '1';
if (move == 3)
board[0][2] = '1';
if (move == 4)
board[1][0] = '1';
if (move == 5)
board[1][1] = '1';
if (move == 6)
board[1][2] = '1';
if (move == 7)
board[2][0] = '1';
if (move == 8)
board[2][1] = '1';
if (move == 9)
board[2][2] = '1';

}while(move>9 && move <1);

最佳答案

当您声明一个大小为 N 的数组时,索引将从零到 X 减一。

因此在您的情况下,board 数组的索引是 02main 函数中的循环从 03,即越界。

越界写入数组会导致 undefined behavior和未定义的行为会使您的程序格式错误。未定义的行为(或 UB)可能导致任何类型的问题,包括看似的工作,只是为了下一刻导致 nasal demons .

关于c - 阻止 Tic Tac Toe 覆盖 C 中的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29871925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com