我希望有一种方法,以便在“ 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
答案 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;
}
}