在C中的char数组上运行的递归函数中的分段错误

时间:2014-07-07 14:36:30

标签: c arrays recursion char tic-tac-toe

我在C中写过Tic-tac-toe,我在游戏板上放置一个标志的功能有问题。这是代码:

int aiPutSign(int difficultyLevel, char board[])
{
    if(difficultyLevel == 1)
    {
        srand(time(NULL));
        int field = rand() % 9;
        return board[field] == ' ' ? field : aiPutSign(difficultyLevel, board);
    } else if(difficultyLevel == 2)
    {
        //to do
        return 2;
    } else if(difficultyLevel == 3)
    {
        //to do
        return 3;
    }
}

不幸的是,我得到了分段错误错误。所有我知道递归有一个问题,它会导致错误,但我不知道这是怎么回事以及如何修复它。

简而言之:board是9个字符的数组,拥有9个空格,每次玩家移动后我都会在其中放置X和O标志。如果玩家(这里是计算机AI)试图在已经填充的字段上放置符号,则递归递归并且rand()生成另一个字段数。

1 个答案:

答案 0 :(得分:6)

不要将srand(time(NULL));放入aiPutSign功能,每次通话都会获得相同的随机数。例如,在程序开始时调用srand一次。