簡體   English   中英

forf循環中的Printf語句

[英]Printf statement in for loop

因此,我試圖比較這兩個數組的值,並創建了一個比較每個數組的每個元素的測試。 但是,我只希望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");
        }
    }
}

只需使用一個標志,並僅在已設置的情況下進行打印! 喜歡:

...
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");
}

只要記住#include <stdbool.h>否則您將無法在C語言中使用布爾類型。如果您不希望包含布爾類型,則int變量將非常有用!

您可以在循環中保留一個標志,以表明矩陣是否相等:

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");

三種不使用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");    

使用goto版本2:

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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM