我需要一些代码的帮助。我有一个数组,让我们称之为array4。现在,我想检查这个数组中至少有3个元素比阈值高。(如声明)
例如。
if(2 > ((array[0] > threshold) + (array[1] > threshold) + (array[2] > threshold) + (array[3] > threshold) ))米斯拉在抱怨。(规则10.1不允许的操作数运算符"+")是否有另一种方法可以在不检查每个可能的排列的情况下对if语句进行编码?
干杯
发布于 2021-01-08 16:08:04
如何显式地将那些讨厌的不可加法布尔值转换为整数1/0?
if(2 > ((array[0] > threshold?1:0) + (array[1] > threshold?1:0) + (array[2] > threshold?1:0) + (array[3] > threshold?1:0) ))发布于 2021-01-08 16:17:01
把一条线拆下来怎么样,可能是一个循环?它也可以更具可读性:
int check = 0;
for (int i = 0; i<4; i++) {
if (array[i] > threshold) {check++;}
}
if (check >= 3) ...您的if语句实际上似乎是在测试其他“至少3更高”的东西,而不是if (2 > ...) (最多一个?)。
发布于 2021-01-10 11:01:59
这个问题的核心是误解..。布尔型true的值为1,false为0 --您可以将三个布尔值相加。
布尔值要么是true,要么是false。
从数学上讲,+运算符对布尔值没有任何意义:这就是这个特殊的MISRA规则的基本原理(也请参阅解释基本类型的附录).布尔值的C实现被破坏是没有帮助的。
其他的答案提供了其他的选择。但请原谅我们的尤达条件,特别是你似乎对你的解释错了.if ( 2 > ... )甚至不是你的假条件,它需要是if ( 2 < ... )
https://stackoverflow.com/questions/65632408
复制相似问题