Warunek nie powinien się spełnić ale mimo to w programie się spełnia – dlaczego?

0

Witam,

Otóż dzisiaj pisząc program natrafiłem na dziwny problem z instrukcją warunkową if.
Jak widać na dołączonym obrazku warunek nie powinien się spełnić ale mimo to w
programie się spełnia. Jeżeli ktoś widzi w tym kodzie coś nieprawidłowego proszę o
pomoc bo ja już nie wiem co z tym robić ;/

screenshot-20180317012332.png

0

Spróbuj użyć nawiasów, żeby odseparować wyrażenia. W zależności od priorytetu operatorów Twoje wyrażenie może być czytane w taki sposób:

poleGry[y][x - 1], czy równa się 0 || poleGry[y][x], oraz czy całość po lewej stronie równa się poleGry[y][x - 1].

Z powyższego sprawdzamy czy wartość logiczna 4 == (0 lub 2), czyli 1 == (0 v 1) (prawda).
Potem sprawdzamy, czy policzona prawda == wartość logiczna 4 (bo poleGry[y][x - 1] = 4, czyli też prawda).

Wartość logiczna 0 to fałsz, a każda inna liczba jest traktowana jako prawda (można się kłócić, bo to trochę zależy od kompilatora). Dlatego spróbuj wyrażenia pogrupować w nawiasy, żeby mieć pewność, że porównujesz liczby.
( (poleGry[y][x - 1] == 0) || (poleGry[y][x] == poleGry[y][x - 1]) ).

Jak napiszesz if (3) to instrukcja po ifie się wykona, a jak napiszesz if (0), to instrukcja po ifie się nie wykona.

0

Ja bym dla pewności dodał klamry w tym drugim ifie. A w ogóle, jak uważam, nie powinno pisać się bez nawiasów klamrowych. Przynajmniej w C++.

1

IMO to wygląda na jakiś problem z cachem budowania (np w poprzedniej wersji miałeś = zamiast == i kod nadal uruchamia się w starszej wersji).
Jeśli to ten problem, to "Clean" i ponowny "Build" powinien pomóc.

Inny potencjalny powód to przeładowany operator (są takie młotki, które to robią).

1 użytkowników online, w tym zalogowanych: 0, gości: 1