C 如果矩阵[N][N]是=符号,则检查N次

C 如果矩阵[N][N]是=符号,则检查N次,c,tic-tac-toe,C,Tic Tac Toe,我正在用矩阵[N][N]创建一个非常基本的Tic-Tac-Toe。 如果每个矩阵索引都是例如“X”或“O”,如何检查每一行、每一列和每一对角线? 例如,如果我有一个矩阵[10][10],我如何检查第一行是否包含所有的“X”? 语言是C语言,我必须在不做任何复杂事情的情况下使用它,我只能使用while循环、for等,不能使用函数或其他任何东西。泰 编辑:这是我试图编写的代码(它检查每个对角线符号是否为“X”或“O”),它实际上可以工作,但仅适用于3x3矩阵(经典的tic-tac-toe)。我想要的

我正在用矩阵[N][N]创建一个非常基本的Tic-Tac-Toe。 如果每个矩阵索引都是例如“X”或“O”,如何检查每一行、每一列和每一对角线? 例如,如果我有一个矩阵[10][10],我如何检查第一行是否包含所有的“X”? 语言是C语言,我必须在不做任何复杂事情的情况下使用它,我只能使用while循环、for等,不能使用函数或其他任何东西。泰

编辑:这是我试图编写的代码(它检查每个对角线符号是否为“X”或“O”),它实际上可以工作,但仅适用于3x3矩阵(经典的tic-tac-toe)。我想要的是让它为NxN矩阵工作

  for (i=0; i<MAX; i++){
            if (matrix[i-1][i-1] == 'X' && matrix[i][i] == 'X' && matrix[i+1][i+1] == 'X')
                flagC=1;
            else if (matrix[i-1][i-1] == 'O' && matrix[i][i] == 'O' && matrix[i+1][i+1] == 'O') 
                flagC=1;
for(i=0;i
char检查行(char**matrix,int行,char值)
{
对于(i=0;i

如果要谈论对角线,你应该首先决定如何表示它的数字。这并不困难,只要想一想。在对角线中,行数等于列数(或N-列数)。

因此,稍微想一想,行和列都很容易检查:

// Check rows for 'X'
int check;
for(row=0; row<N; row++)
{
    check = 1;

    for(col=0; col<N; col++)
    {
        if(matrix[row][col] != 'X')
            check = 0;
    }
    if(check)
        printf("A row is full of 'X'\n");
}

//Check cols for 'X'
for(col=0; col<N; col++)
{
    check = 1;
    for(row=0; row<N; i++)
    {
        if(matrix[row][col] != 'X')
            check = 0;
    }
    if(check)
        printf("A col is full of 'X'\n");
}

请注意,我没有测试过它,它只是伪代码。不过,您可以希望将其应用于您的代码:)

,也许?@SouravGhosh正如我所说的,我只能使用while循环,例如,我不能使用任何函数或它是什么(我甚至不知道那个memcmp()是什么)。我的编程水平很低,因为我是一名学生,我必须按照老师的要求去做。^^我投票结束这个问题,因为OP没有努力解决编程问题。你检查过超链接吗?FWIW,
main()
也是一个函数。那么,你打算如何避免它呢?也许让我们看看你尝试了什么?对不起,这对于我的编程水平来说已经太复杂了。我认为你写的两件事(字符检查行等)是函数还是什么?我们仍然没有做这件事,所以我实际上无法使用that@kHz-如果你的学校现在不允许你使用函数,你可以把代码从函数中去掉,放到主函数中。不过我不推荐这种做法,函数是一种基本的编程工具,在我的学校,我们第一天就学会了如何使用它们。我以前已经试过了,但它不起作用。这是因为如果矩阵[row][col]为X',它将使支票为0。例如:如果矩阵[0][0]为!='X',它将把检查置于0,而不检查行或列的其他元素。是,这是您在检查整行或整列“X”时希望它执行的操作:)。必须使用此方法分别搜索“X”和“O”。或者,您可以定义两个“checks”checkX和checkO,以避免编写两个循环。我写的代码大约是你需要的一半。我很确定这是可行的。啊,是的,对不起,我接受你的观点。我已经更新了我的代码,做了一些小的修改来修复这个问题。这一次我也测试了它,并保证它能工作:)。实际上,它只检查=0,如果行\列中只有一个元素是'X',我需要在行\列的每个元素都是'X'时检查=0,因为代码写在while循环中,while循环将在检查时停止!=0!还尝试将其更改为已编辑的代码,但实际上是相同的。我的程序仍然在第一次移动时结束,因为您放置的控件在第一次移动后,标志(check)将始终为0,因为它只需要一行\列中的一个“X”即可获得check=0^^'
// Check rows for 'X'
int check;
for(row=0; row<N; row++)
{
    check = 1;

    for(col=0; col<N; col++)
    {
        if(matrix[row][col] != 'X')
            check = 0;
    }
    if(check)
        printf("A row is full of 'X'\n");
}

//Check cols for 'X'
for(col=0; col<N; col++)
{
    check = 1;
    for(row=0; row<N; i++)
    {
        if(matrix[row][col] != 'X')
            check = 0;
    }
    if(check)
        printf("A col is full of 'X'\n");
}
// Check diagonals for 'X'
int check = 1;
for(col=0; col<N; col++)
    if(matrix[col][col] != 'X')
        check = 0;
// Check opposite diagonals for 'X'
int check = 1;
for(col=N-1; col >= 0; col--)
    if(matrix[col][col] != 'X')
        check = 0;