[英]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.