c - N x N 井字棋检查获胜

标签 c loops for-loop multidimensional-array while-loop

在过去的两天里,我一直在尝试制作 N x N Tic Tac Toe 游戏,但我遇到了一个问题,我不明白为什么会发生这个问题,如果有人可以提供帮助,我会很高兴我解决这个问题。问题是当我检查 Horizo​​ntal Win 时,我的程序仅检查第一行而不检查其他行。这是我用来检查水平获胜的函数:

void HorizontalWin()
{
    for(int i=0; i<size; i++){
        for(int j=0; j<size; ++j){
            if(board[i-1][j-1]==board[i-1][j] && board[i][j]!='_')
                horizontal=1;
            else {
                horizontal=0;
                break;
            }
        }
        if (horizontal==1)
            break;
    }
}

大小:是网格的大小,它取自用户。

最佳答案

对于初学者来说,当函数使用全局变量时,这是一个坏主意,尽管它可以在不访问全局变量的情况下进行定义。

尽管如此,您的函数可以通过以下方式定义

void HorizontalWin()
{
    horizontal = 0;

    for ( int i = 0; !horizontal && i < size; i++ )
    {
        if ( board[i][0] != '_' )
        {
            int j = 1;
            while ( j < size && board[i][j] == board[i][0] ) j++;
            horizontal = j == size;
        }
    }
} 

至于你的函数实现,它具有未定义的行为,因为至少在这个 if 语句中

if(board[i-1][j-1]==board[i-1][j] && board[i][j]!='_')

当 i 或 j 等于 0 时,会尝试访问数组之外​​的内存。

关于c - N x N 井字棋检查获胜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079282/

相关文章:

Java:为什么我不断收到此方法的 StringIndexOutOfBoundsException?

c - 如何使用 fgets 从键盘扫描格式化输入(字符串)?

交叉编译的应用程序不能在 Raspberry Pi 上运行

c - 如何在一个变量中存储多个整数,以便稍后获得它们的总数

Ruby - 循环不会中断

python - 无法创建 Python 循环

java - 如何在 Java 的嵌套 for 循环中用字母递增值?

c - Hogwild 中的虚假分享!算法

c - 异常: Access Violation when trying to use fscanf()

loops - Solidworks 宏在每个工程图上查找和替换