可视化 如何在 c++ 中循环浏览 2D 数组



我试图弄清楚如何水平、对角线和亚对角线遍历 2d 数组以查看数组是否等于字符.如果数组等于字符,那么bool应该返回 true,但我的问题是bool随机返回 true。 仅当 char 等于特定列和行的数组时,bool 才返回 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;
}

在这里我尝试使用 for 循环,但如果数组等于字符,它int总是返回 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;
        }
    }
}
mCard[col][row]
...

rowcol必须翻转。

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

确保值已初始化。

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 linesn";
    match = true;
    for(int i = 0; i < 5 && match; i++)
        if(mCard[i][i] != '*')
            match = false;
    if(match) cout << "top-left to bottom-right matchn";
    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 matchn";
    return 0;
}

最新更新