如果条件不起作用,我正在写一段由于以下原因而失败的代码。 请注意,最小值= 3,范围= 18。两者都是整数。
if ((8 >= (min+2*range/10)) && (8 < (min+3*range/10)))
printf("it works\n");
答案 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=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语句在第二个表达式上失败,并且不执行。
答案 2 :(得分:-1)
将其拆分成较小的部分,为每个部分分配变量,然后在调试器中查看这些变量或将其打印出来,您会发现问题出在哪里。
您不需要弄清楚这个问题,您需要学习更好的调试技术。