C 我编写了一个程序来检查矩阵是否对称。它以一种方式工作,但不是以另一种方式工作,尽管两者似乎都是正确的

C 我编写了一个程序来检查矩阵是否对称。它以一种方式工作,但不是以另一种方式工作,尽管两者似乎都是正确的,c,matrix,multidimensional-array,C,Matrix,Multidimensional Array,请在下面找到所需的代码 不起作用的方式: int isSy = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (r[i][j] = trans[i][j]) isSy = 1; break; } } if (isSy == 1) printf("T

请在下面找到所需的代码

不起作用的方式:

    int isSy = 0;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++)  {
            if (r[i][j] = trans[i][j])
                isSy = 1;
            break;
        }
    }
    if (isSy == 1)
        printf("The given matrix is symmetric.");
    else {
        printf("The given matrix is not symmetric.");
    }
工作方式:

    int isSy = 1;
    for (i = 0;i < row; i++) {
        for (j = 0; j < col; j++) {
            if (r[i][j] != trans[i][j])
                isSy = 0;
            break;
        }
    }
    if (isSy == 1)
       printf("The given matrix is symmetric.");
    else {
        printf("The given matrix is not symmetric.");
    }

其中r是实际矩阵,trans是其转置。

如果您观察该语句,如果r[i][j]=trans[i][j],则它不是比较语句,而是赋值语句

 if (r[i][j]==trans[i][j])
         isSy=1;
         break;
相当于

if (r[i][j]==trans[i][j])
   {
         isSy=1;
   }
   break; 
因此,无论条件检查如何,循环都会中断 我假设逻辑应该类似于下面的代码片段

int isSy=1;
  for (i=0;i<row;i++)
  {
    for (j=0;j<col;j++)
    {
      if (r[i][j]!=trans[i][j]) {
          isSy=0;
          break; //only inner loop
        }
    }
    if(isSy==0)
    {
        break; //breaks outer loop
    }
  }
  if (isSy==1)
    printf("The given matrix is symmetric.");
  else
  {
    printf("The given matrix is not symmetric.");
  }

尝试添加大括号以提高代码的清晰度和可读性

将r[i][j]=trans[i][j]更改为r[i][j]==trans[i][j]@john not working man!!!您的中断不在if内,您应该在isSy=1周围放置一些括号并中断