在多个条件的if语句中如何使用或运算符

时间:2019-06-24 13:26:22

标签: c

我希望有一种方法,以便在“ if语句”中,如果我们使用多个“或”运算符,我们可以将值分配给将在if语句中使用该特定条件的变量。

    if(sum1>15 || sum2>15 || sum3 >15)
    {
    //I want sum = sum1 if the first condition satisfies, sum=sum2 if the //second sum=sum3 if the third, instead of given code below.
    }

    if(sum1>15)
    sum=sum1
    if(sum2>15)
    sum=sum2
    if(sum3>15)
    sum=sum3

3 个答案:

答案 0 :(得分:1)

表达式

sum3 > 15 && (sum = sum3, 1) || sum2 > 15 && (sum = sum2, 1) || sum1 > 15 && (sum = sum1, 1)

这样做会以混淆为代价(由于短路操作员的赋值副作用,MISRA禁止此类操作)。在这里,我利用&&||短路属性:仅当左手参数为1时,赋值才发生。此外,求值赋值表达式的值永远不会为零。 (在您的特定情况下,, 1是多余的,但是在那里,所以我们不必依赖15为正的事实。)

换句话说,一切都很片状。使用3个if更加清晰。

答案 1 :(得分:1)

您可以执行以下操作:

sum = sum3>15 ? sum3 : (sum2>15 ? sum2 : (sum1>15 ? sum1 : sum));

括号是可选的。他们只是为了使事情更清楚。但是,我绝对会推荐您的三个if语句。

  

我希望有一种方法,以便在“ if语句”中,如果我们使用多个“或”运算符,我们可以将值分配给将在if语句中使用该特定条件的变量。

如果您不愿意修改if语句,则完全不可能。当您输入if语句的正文时,您唯一可以确定的是,该条件作为一个整体评估为true。

答案 2 :(得分:1)

正确的解决方案几乎可以肯定是使用循环重写代码:

int sum[n] = ... ;
int result = 0;

for(size_t i=0; i<n; i++)
{
  if(sum[i] > 15)
  {
    result = sum[i];
    break;
  }
}