При верном условии компилятор не переходит в блок if-а

При верном совпадении условий компилятор пропускает этот блок кода и переходит дальше и наоборот, если условие не верное, то блок if-а выполняется. Есть двумерный массив размером 5х3. Мы проверяем, чтобы определенные элементы были равны, но в случае когда они равны и условие должно выполняться этот блок кода пропускается и компилятор переходит к следующему. '''

//ЛИНИЯ 4, 5, 6 - ПРЯМАЯ ТРОЙНАЯ
counter = 0;
for (int i = 0; i < ROWS; i++)
{
    for (int j = 0; j < COLS - 2; j++)
    {
        counter++;
        if (field[i][j] == field[i][j + 1] == field[i][j + 2])
        {
            cout << "ВЫ ВЫИГРАЛИ" << endl;
            win_counter++;
            *cash += bet_;
            cout << "ПРЯМАЯ ТРОЙНАЯ" << endl;
        }
        else if (counter == 9 && (field[2][j] != field[2][j + 1] != field[2][j + 2]))
        {
            break;
        }
        else continue;
    }
}
//ЛИНИЯ 7
if (field[0][0] == field[1][1] == field[2][2])
{
    *cash += bet_;                                          
    cout << "ВЫ ВЫИГРАЛИ" << endl;  
    win_counter++;
    cout << "УГЛОВАЯ" << endl;                                                  
}                              
if (field[1][1] == field[2][2] == field[1][3])
{
    *cash += bet_;
    cout << "ВЫ ВЫИГРАЛИ" << endl;
    win_counter++;
    cout << "УГЛОВАЯ" << endl;
}
if (field[2][2] == field[1][3] == field[0][4])
{
    *cash += bet_;
    cout << "ВЫ ВЫИГРАЛИ" << endl;
    win_counter++;
    cout << "УГЛОВАЯ" << endl;
}

'''


Ответы (1 шт):

Автор решения: CrazyElf
if (field[0][0] == field[1][1] == field[2][2])

Насколько я понимаю, в C++ это работает не так, как в Python. В последнем это аналогично такому коду:

if field[0][0] == field[1][1] and field[1][1] == field[2][2]

Но в C++ не так. Насколько я понимаю, тут это будет:

if ((field[0][0] == field[1][1]) == field[2][2])
    ^^^^^^ true или false ^^^^^^ == field[2][2]

Т.е. слева у вас true либо false, в зависимости от того, равны первые два элемента или нет, а что у вас в field[2][2] я не знаю, но в любом случае такое сравнение будет работать не так, как вы ожидаете. Правильное сравнение будет такое:

if ((field[0][0] == field[1][1]) && (field[1][1] == field[2][2]))
→ Ссылка