Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有办法将几个不同的条件与一个共享语句结合起来?_C_Syntax_Logic_Structure_Conditional Statements - Fatal编程技术网

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的问题。