所以我试图比较这两个数组的值,并创建了一个测试,将每个数组的每个元素相互比较。但是,我只希望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");
}
}
}
答案 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]);