C 有没有办法将几个不同的条件与一个共享语句结合起来?
有没有办法将几个不同的条件与一个共享语句结合起来 例如:C 有没有办法将几个不同的条件与一个共享语句结合起来?,c,syntax,logic,structure,conditional-statements,C,Syntax,Logic,Structure,Conditional Statements,有没有办法将几个不同的条件与一个共享语句结合起来 例如: int a; ... if (a == 1){ foo; ... return K1; } else if (a == 2){ foo; ... return K2; } ... else if (a == i){ foo; ... return Ki; } 有没有一种聪明的方法可以将foo去掉,但只在这些条件下发生?(就像代数中的因式分解:2x+6=2(x+3))
int a;
...
if (a == 1){
foo;
...
return K1;
}
else if (a == 2){
foo;
...
return K2;
}
...
else if (a == i){
foo;
...
return Ki;
}
有没有一种聪明的方法可以将foo
去掉,但只在这些条件下发生?(就像代数中的因式分解:2x+6=2(x+3))
它感觉重复,所以我想应该有办法把它缩短。在您的场景中这样做可以吗
int a;
int k; // let's assume int
...
k = a == 1? K1:
a == 2? K2:
...
a == i? Ki:
K0; // a special value
if (k != K0)
foo;
return k;
假设返回值的类型为
int
(相应地更改它)。您可以使用以下命令:
int a;
int retVal;
int execFoo;
execFoo = 0;
...
if (a == 1){
execFoo = 1;
...
retVal = K1;
}
else if (a == 2){
execFoo = 1;
...
retVal = K2;
}
...
else if (a == i){
execFoo = 1;
...
retVal = Ki;
}
if(execFoo == 1)
foo;
return retVal;
扩展WeatherVane关于数组的评论-值始终可以存储在数组中,即使它们没有以这种方式到达所讨论的块-只需将它们放入一个新的数组中:
T array[] = { [1] = K1, K2, K3, ..., Ki };
foo();
return a <= i && a > 0 ? array[a] : K0;
T数组[]={[1]=K1,K2,K3,…,Ki};
foo();
返回一个0?数组[a]:K0;
我认为最好使用helper函数获取a
对应的k
,然后使用k
的值调用foo
// Function to get K given a.
int getK(int a)
{
switch (a)
{
case 1:
return K1;
case 2:
return K2;
default:
return K_Unknown;
}
}
功能的使用:
int a;
int k = getK(a);
if ( k != K_Unknown )
foo;
您可以定义一个宏IF(cond)IF((cond)和&(,1))
并在所有块之后取消定义它:
#define IF...
IF (a == 1) { ... }
else IF (a == 2) { ... }
#undef IF
(假设
是一个表达式)你能做foo;返回数组[i]
?@WeatherVane这确实是个好主意,但返回值并不总是存储在数组中。如果有一种简单的方法将条件组合成一个(例如,1比我的更聪明的解决方案:DIt确实取决于“…”的权重是的,这还取决于我们是否有一个连续的序列1,2,,i
或其他任何东西。@user312567因为如果我们假设我们有序列,那么就可以使用数组,就像其他人建议的那样。哦,这取决于K*的纯度和亮度:)IMO,这感觉和原始代码一样重复。@Unda在ifs之前可以使用execfoo=1修复它,并在else块中重置它一次。但是,这并不能解决在其他块之后调用foo的问题。