Почему условие if не выполнено? - PullRequest
0 голосов
/ 21 ноября 2019

Я пишу фрагмент кода, который не работает из-за следующего, если условие не работает. Обратите внимание, что min = 3 и диапазон = 18. Оба являются инт.

if ((8 >= (min+2*range/10)) && (8 < (min+3*range/10)))
        printf("it works\n");

Ответы [ 3 ]

1 голос
/ 21 ноября 2019

Сначала давайте посмотрим на первое выражение:

(min+2*range/10)

С подставленными значениями вы получите:

(3+2*18/10)

Умножение и деление имеют одинаковый приоритет и оба имеют более высокий приоритет, поэтомусначала выполняется умножение, затем деление, затем сложение. Итак, мы имеем:

3+2*18/10 == 3+36/10 == 3+3 == 6

Обратите внимание, что деление является целочисленным делением, что означает, что любая дробная часть усекается. Это дает нам 8 >= 6, что верно.

Теперь мы посмотрим на вторую часть:

(min+3*range/10)

Это идентично последнему выражению с 2, поставленным вместо 3. Таким образом, это становится:

3+3*18/10 == 3+56/10 == 3+5 == 8

Это оставляет нас с 8 < 8, что ложно, поэтому все выражение ложно.

0 голосов
/ 21 ноября 2019

С min=3 и range=18 первое выражение:

(min+2*range/10)
(3 + 2*18/10)
(3 + 36/10)
(3 + 3) 
6

8 >= 6 верно, поэтому первое выражение true.


Второе выражение:
(min+3*range/10)
(3 + 3*18/10)
(3 + 54/10)
(3 + 5)
8

8 < 8 равно false

Таким образом, оператор if не выполняется во втором выражении и не выполняется.

0 голосов
/ 21 ноября 2019

Разбейте его на более мелкие кусочки, присвойте переменные каждому кусочку и посмотрите на переменные в отладчике или распечатайте их, и вы увидите, где они идут не так.

вам не нужно вычислятьЧтобы решить эту проблему, вам необходимо изучить лучшие методы отладки.

...