Tic Tac Toe在第三次移动后重置电路板

Tic Tac Toe在第三次移动后重置电路板,c,C,所以在第四步之前一切都很顺利。然后重置电路板,并将和X放入第一个框中。怎么了?此外,我更希望我能被引导到答案上来,而不仅仅是给出答案,这是为了学习。我也试着在没有任何帮助的情况下,通过切割一部分并检查其效果来找到答案。(不知道如何使用调试器,因为调试器总是显示,文件名没有调试信息) #包括 #包括 int清除(无效); int显示板(无效); int初始化(void); int startgame(无效); int checkwin(char); int canwin(无效); int getm

所以在第四步之前一切都很顺利。然后重置电路板,并将和X放入第一个框中。怎么了?此外,我更希望我能被引导到答案上来,而不仅仅是给出答案,这是为了学习。我也试着在没有任何帮助的情况下,通过切割一部分并检查其效果来找到答案。(不知道如何使用调试器,因为调试器总是显示,文件名没有调试信息)

#包括
#包括
int清除(无效);
int显示板(无效);
int初始化(void);
int startgame(无效);
int checkwin(char);
int canwin(无效);
int getmove(无效);
int makemove(void);
int canblock(无效);
炭板[3][3];
int main()
{   
国际货币基金组织;
而(1)
{
printf(“|\\/| | |/\\\\\\\\n”);
printf(“|\\/| | |/--\\\\\\\\n”);
printf(“| | | | | |/\\\\\\\\\\\\\\\\n”);
printf(“Tic tac toe版本1\n\n”);
printf(“[主菜单]\n”);
printf(“1-开始游戏\n”);
printf(“2-退出游戏\n”);
scanf(“%d”和menuchoice);
如果(menuchoice==1)
{
清除();
startgame();
}
else if(menuchoice==2)
{
退出(退出成功);
}
}
}
/*打印换行以刷新页面*/
整数清除(无效)
{
int i;

对于(i=0;i我认为您的
canwin()
函数有问题,据我所知,您希望a.i.测试它是否能够成功。但是看看函数

int canwin(void)
{
    int rownumber,colnumber;
    for(rownumber=0;rownumber<3;rownumber++)
    {
        for(colnumber=0;colnumber<3;colnumber++)
        {
            board[rownumber][colnumber]='X'; // <--- Problem here
            if(checkwin('X')==1)
            {
                return 1;
            }
            board[rownumber][colnumber]=' ';
        }
    }
    return 0;
}

要使用调试器,需要使用适当的编译器选项编译程序(例如,gcc的
-g
)。此外,如果使用gcc,请使用
-Wall
编译,这会警告您编写几乎总是某种错误的代码,例如,gcc告诉我,如果您的
中有一个未触发,则函数
makemove
不会返回任何值。它还告诉我,您的语句
板[0][1]=='X';
无效,您可能想编写
板[0][1]='X';
在这里。对Pelles C ide有什么想法吗?同样在makemove中,不触发任何if或else if语句是不可能的,因为如果所有的方块都被拿走,游戏将以平局结束,因为movecount将是=9,哦,我键入了==而不是=。修复了。但是同样的问题还在继续,它似乎不是导致主要问题的原因我不知道Pelles C,他们有自己的编译器。关于
makemove
:如果它总是返回1,而您不使用返回值,为什么不将
makemove
声明为
void makemove(void)
?快速搜索“Pelles C调试”我得到了这个,而且帮助文件似乎包含了很多信息。哦!!!!那个空白部分是我的psuedo代码的一部分!谢谢!!看起来那个部分是我的canwin和canblock函数中的问题。谢谢!嗯…我只是自己运行了代码,但这并没有解决问题,你呢?啊,我想你在你的
canblock()
函数。这似乎至少为我修复了代码。应该是。是的,我似乎忘记在if(checkwin()==1)过程中清除()和显示板();以便在win过程中显示最后一块板
int canwin(void)
{
    int rownumber,colnumber;
    for(rownumber=0;rownumber<3;rownumber++)
    {
        for(colnumber=0;colnumber<3;colnumber++)
        {
            board[rownumber][colnumber]='X'; // <--- Problem here
            if(checkwin('X')==1)
            {
                return 1;
            }
            board[rownumber][colnumber]=' ';
        }
    }
    return 0;
}
if (board[rownumber][colnumber] == ' ')
{
    board[rownumber][colnumber]='X';
    ...