首页 > 解决方案 > 如何在 C++ 中循环遍历二维数组?

问题描述

我试图弄清楚如何水平垂直、对角地和子对角地循环遍历二维数组,以查看数组是否等于 char。如果数组等于 char,那么 abool应该返回 true,但我的问题是bool随机返回真。bool如果 char 等于特定列和行的数组,则唯一返回 true 。在这里,我对其进行了硬编码,但我想使用 for 循环来完成。让我知道您是否需要更多信息或需要解释的内容

if (mCard[0][0] == '*' && mCard[0][1] == '*'&& mCard[0][2] == '*'&& mCard[0][3] == '*' && mCard[0][4] == '*') {

    CheckBingo = true;
}
if (mCard[1][0] == '*' && mCard[1][1] == '*'&& mCard[1][2] == '*'&& mCard[1][3] == '*' && mCard[1][4] == '*') {

    CheckBingo = true;
}
if (mCard[2][0] == '*' && mCard[2][1] == '*'&& mCard[2][2] == '*'&& mCard[2][3] == '*' && mCard[2][4] == '*') {

    CheckBingo = true;
}
if (mCard[3][0] == '*' && mCard[3][1] == '*'&& mCard[3][2] == '*'&& mCard[3][3] == '*' && mCard[3][4] == '*') {

    CheckBingo = true;
}
if (mCard[4][0] == '*' && mCard[4][1] == '*'&& mCard[4][2] == '*'&& mCard[4][3] == '*' && mCard[4][4] == '*') {

    CheckBingo = true;
}


if (mCard[0][0] == '*' && mCard[1][0] == '*'&& mCard[2][0] == '*'&& mCard[3][0] == '*' && mCard[4][0] == '*') {

    CheckBingo = true;
}
if (mCard[0][1] == '*' && mCard[1][1] == '*'&& mCard[2][1] == '*'&& mCard[3][1] == '*' && mCard[4][1] == '*') {

    CheckBingo = true;
}
if (mCard[0][2] == '*' && mCard[1][2] == '*'&& mCard[2][2] == '*'&& mCard[3][2] == '*' && mCard[4][2] == '*') {

    CheckBingo = true;
}
if (mCard[0][3] == '*' && mCard[1][3] == '*'&& mCard[2][3] == '*'&& mCard[3][3] == '*' && mCard[4][3] == '*') {

    CheckBingo = true;
}
if (mCard[0][4] == '*' && mCard[1][4] == '*'&& mCard[2][4] == '*'&& mCard[3][4] == '*' && mCard[4][4] == '*') {

    CheckBingo = true;
}

// checking for daigonal
if (mCard[0][0] == '*' && mCard[1][1] == '*'&& mCard[2][2] == '*'&& mCard[3][3] == '*' && mCard[4][4] == '*') {

    CheckBingo = true;
}
// checking for sub diagonal
if (mCard[4][0] == '*' && mCard[3][1] == '*'&& mCard[2][2] == '*'&& mCard[1][3] == '*' && mCard[0][4] == '*') {

    CheckBingo = true;
}

int在这里,我尝试使用 for 循环,但如果数组等于 char,它总是返回 true。

for(int row = 0; row < 5; row++) {
    for(int col = 0; col < 5; col++) {
        if(mCard[row][col] == '*') {
            CheckBingo = true;
        }
        else {
            CheckBingo = false;
            break;
        }
    }
}

for(int row = 0; row < 5; row++) {
    for(int col = 0; col < 5; col++) {
        if(mCard[col][row] == '*') {
            CheckBingo = true;
        }
        else {
            CheckBingo = false;
            break;
        }
    }
}

标签: c++visual-c++multidimensional-array

解决方案


mCard[col][row]
...

row并且col必须翻转。

然后,假设设置了匹配项,则开始循环。如果其中一个单元格不匹配,则匹配为假。请参见下面的示例。

确保值已初始化。

int main()
{
    char mCard[5][5] = {
    '*','x','*','*','*',
    '*','*','*','*','*',
    '*','*','*','*','*',
    '*','*','x','*','*',
    '*','*','*','*','*',
    };

    bool CheckBingo = true;
    for(int row = 0; row < 5; row++)
    {
        CheckBingo = true;
        for(int col = 0; col < 5 && CheckBingo; col++)
        {
            if(mCard[row][col] != '*')
                CheckBingo = false;
        }
        if(CheckBingo)
            cout << "bingo on row " << row << "\n";
    }

    bool match = true;
    for(int row = 0; row < 5 && match; row++)
        for(int col = 0; col < 5 && match; col++)
            if(mCard[row][col] != '*')
                match = false;
    if(match) cout << "bingo for all lines\n";

    match = true;
    for(int i = 0; i < 5 && match; i++)
        if(mCard[i][i] != '*')
            match = false;
    if(match) cout << "top-left to bottom-right match\n";

    match = true;
    for(int i = 0; i < 5 && match; i++)
        if(mCard[i][4-i] != '*')
            match = false;
    if(match) cout << "top-right to bottom-left match\n";

    return 0;
}

推荐阅读