Как мне пройти через 2d массивы в C ++? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь выяснить, как перебрать массив 2d по горизонтали, вертикали, диагонали и суб-диагонали, чтобы увидеть, равен ли массив символу. Если массив равен символу, то bool должен вернуть значение true, но моя проблема bool случайно возвращает истину.bool возвращает true, только если символ равен массиву в определенном столбце и строке.Здесь я жестко кодирую это, но я хочу сделать это для циклов.Дайте мне знать, если вам нужна дополнительная информация или нужно что-то объяснить

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 всегда возвращает true, если массив равен char.

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;
        }
    }
}

1 Ответ

0 голосов
/ 12 февраля 2019
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...