循环遍历数组以检查条件

时间:2018-04-14 10:31:53

标签: c

我使用FOR循环遍历数组来检查条件,但它似乎复制了我想要打印的变量。 这是我的代码:

    /*Printing the matrix*/
    for(row=0;row<15;row++)
    {
        for(col=0;col<8;col++)
        {
            for(a=0;a<sizeof(row_sel)/(sizeof(row_sel[0]));a++)
            {
                if(row==row_sel[a] && col==col_sel[a])
                {
                    printf("|%d|",matrix[row][col]);
                }
                else
                {
                    printf(" %d ",matrix[row][col]);
                }
            }
        }
        printf("\n");
    }

我试图打印的是:

 |0|   6    7    3    6    6    9    5
  0    0    0    0    0    0    0    0
  2    8    8    4    8    4    0    0
  0    0    0    0    0    0    0    0
  5    0    8    7    9    5    5    3
  0    0    0    0    0    0    0    0
  2    7    8    5    3    3    8    6
  0    0    0    0    0    0    0    0
  6    6    4    2    9    6    2    1
  0    0    0    0    0    0    0    0
  9    4    0    6    6    7    0    4
  0    0    0    0    0    0    0    0
  4    3    8    9    0    2    2    7
  0    0    0    0    0    0    0    0
  0    3    6    7    8    3    5   |2|

但是我得到了这个输出,我不知道为什么值重复,循环应该已经结束或跳过语句:

|0| 0  0  1  1  1  2  2  2  7  7  7  7  7  7  3  3  3  6  6  6  1  1  1
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 0  0  0  6  6  6  3  3  3  2  2  2  0  0  0  4  4  4  2  2  2  9  9  9
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 5  5  5  4  4  4  6  6  6  3  3  3  5  5  5  8  8  8  6  6  6  5  5  5
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 5  5  5  7  7  7  1  1  1  9  9  9  1  1  1  2  2  2  0  0  0  4  4  4
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 9  9  9  7  7  7  3  3  3  6  6  6  8  8  8  0  0  0  3  3  3  8  8  8
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 5  5  5  2  2  2  6  6  6  5  5  5  2  2  2  7  7  7  5  5  5  5  5  5
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 5  5  5  7  7  7  8  8  8  3  3  3  2  2  2  1  1  1  1  1  1  6  6  6
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 9  9  9  6  6  6  9  9  9  7  7  7  2  2  2  6  6  6  2  2  2  5 |5| 5

我出错的地方有哪些提示?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的问题:

您打印每个 a的矩阵的每个值,但您只想打印一次。

解决方案:

你必须将if-else语句移出最里面的循环:

for(row=0;row<15;row++)
{
    for(col=0;col<8;col++)
    {
        bool foundMatch = false;
        for(a=0;!foundMatch && a<sizeof(row_sel)/(sizeof(row_sel[0]));a++)
        {
            foundMatch = row==row_sel[a] && col==col_sel[a];
        }
        if(foundMatch)
        {
            printf("|%d|",matrix[row][col]);
        }
        else
        {
            printf(" %d ",matrix[row][col]);
        }
    }
    printf("\n");
}

为什么/如何运作

内部循环将一直运行,直到foundMatch为真,或a超出范围。

如果[{1}}为foundMatch a,则{p> row==row_sel[a] && col==col_sel[a]设置为true。

如果true为真,则会打印

|%d|