При верном условии компилятор не переходит в блок 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 шт):
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]))