for循环中的printf语句

时间:2016-01-26 09:12:22

标签: c

所以我试图比较这两个数组的值,并创建了一个测试,将每个数组的每个元素相互比较。但是,我只希望printf语句只在​​每个数组的所有元素彼此相等时才打印一次。

此代码打印每个相等元素的语句,但如果所有元素都相同,我只需要打印一次。我该怎么办?

int MatrixEqualsActual[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int MatrixEquals[3][3] = {{3, 5, 9}, {1, 2, 6}, {9, 0, 1}};

int i, j;
for (i = 0; i < 3; i++) { 
    for (j = 0; j < 3; j++) { 
        if(MatrixEqualsActual[i][j] == MatrixEquals[i][j]) 
        {    
            printf("PASSED (2/2): MatrixEquals()\n");
        }
    }
}

3 个答案:

答案 0 :(得分:5)

只需使用一个标志,只有在设置好后才打印! 像:

var x = 1, y = 2;//Pass arguments(x,y) to a callback function

document.getElementById('someelem').addEventListener('click', function(x, y) {
   alert('Hi human');
});

请记住... bool flag = true; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if(MatrixEqualsActual[i][j] != MatrixEquals[i][j]) { flag = false; break; // we break since we already know that at least one element doesn't match. } } } if(flag) { printf("PASSED (2/2): MatrixEquals()\n"); } 或者您将无法在C中使用布尔类型。 如果你不想包含它,那么#include <stdbool.h>变量就会很好!

答案 1 :(得分:3)

你可以在循环中保留一个标志,表明矩阵是否相等:

int areEqual = 1;
for(...){
    for(...){
        if (MatrixEqualsActual[i][j] != MatrixEquals[i][j]){
            areEqual = 0;
            break; //stop checking by breaking out of the loop
        }
    }
}
if (areEqual) printf("They're the same matrix\n");

答案 2 :(得分:1)

three possible ways来实现这一点而不使用break - 在C / C ++ break中只能终止最内层的循环,这不是你所追求的。

版本1使用简单的return

int i, j;
for (i = 0; i < 3; i++) { 
   for (j = 0; j < 3; j++) { 
      if (MatrixEqualsActual[i][j] != MatrixEquals[i][j]) 
      {    
          return;
      }
   } 
}
printf("PASSED (2/2): MatrixEquals()\n");    

版本2使用goto

int i, j;
for (i = 0; i < 3; i++) { 
    for (j = 0; j < 3; j++) { 
       if (MatrixEqualsActual[i][j] != MatrixEquals[i][j]) 
       {    
           goto mark;
       }
    } 
}
printf("PASSED (2/2): MatrixEquals()\n");
mark: {} // Matrices do not equal

版本3使用标记:

int i, j;
int flag = 1;
for (i = 0; (i < 3) && flag; i++) { 
    for (j = 0; (j < 3) && flag; j++) { 
        if (MatrixEqualsActual[i][j] != MatrixEquals[i][j]) 
        {    
            flag = 0;
        }
    } 
}
if (flag) {
    printf("PASSED (2/2): MatrixEquals()\n");
}

此外,您可能希望在循环条件中使用计算长度替换硬编码的3,如下所示:

size_t length_outer = sizeof(MatrixEqualsActual) / sizeof(MatrixEqualsActual[0]);
size_t length_inner = sizeof(MatrixEqualsActual[0]) / sizeof(MatrixEqualsActual[0][0]);