为什么不满足条件?

时间:2019-11-21 03:15:40

标签: c if-statement

如果条件不起作用,我正在写一段由于以下原因而失败的代码。 请注意,最小值= 3,范围= 18。两者都是整数。

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

3 个答案:

答案 0 :(得分:1)

首先让我们看一下第一个表达式:

(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,它是错误的,所以整个表达式都是错误的。

答案 1 :(得分:0)

对于min=3range=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 < 8false

因此,if语句在第二个表达式上失败,并且不执行。

答案 2 :(得分:-1)

将其拆分成较小的部分,为每个部分分配变量,然后在调试器中查看这些变量或将其打印出来,您会发现问题出在哪里。

您不需要弄清楚这个问题,您需要学习更好的调试技术。