在C语言中实现基于条件的循环

在C语言中实现基于条件的循环,c,loops,for-loop,foreach,C,Loops,For Loop,Foreach,我有一组语句需要在两个不同的循环中执行;根据检查条件的结果确定的回路。这种类型有多个这样的集合 Set A : statement 1 statement 2 statement 3 Set B : statement 4 statement 5 statement 6 and so on.. 现在,它们需要按如下方式执行: if(condition 1) loop over some Loop A e

我有一组语句需要在两个不同的循环中执行;根据检查条件的结果确定的回路。这种类型有多个这样的集合

Set A : statement 1
        statement 2
        statement 3

Set B : statement 4
        statement 5
        statement 6

and so on..
现在,它们需要按如下方式执行:

if(condition 1)
    loop over some Loop A
        execute Set A
else if(condition 2)
    loop over some loop B
        execute Set A

These loops can be completely different from each other.
现在,为了代码的清晰性,我不希望像上面提到的那样编写代码。另一个原因是为了把它们组合在一起,我必须制作多个集合

是否有任何机制可以实现以下目标:

CHECK_CONDITION_AND_LOOP_HERE
    execute Set A
我曾尝试使用宏来实现这一点,在表达式中使用了带括号的组,但未能实现。我还尝试使用三元运算符以及通过开关盒下降来实现这一点,但没有得到相同的结果

在C语言中有什么方法可以实现我想要的行为吗

问题的示例代码:

if(condition A)
    for(i=0; i<10; i++, k*=2) {
        execute Set A;  //Operations performed here use variable k
    }
else if(condition B)
    for(j=5; j<75; j+=5, k*=arr[j]) {
        execute Set A;  //Operations performed here use variable k
    }
if(条件A)
对于(i=0;iA函数,也许

void func_A() {
    printf("Here0\n");
    printf("Here1\n");
}

...

if(a < b) {
    for(i = 1; i <= 10; i++) {
        func_A()
    }
}
else if(a == b) {
    for(i = 3; i <= 7; i++) {
        func_A()
    }
}
void func_A(){
printf(“此处为0\n”);
printf(“此处1\n”);
}
...
if(a
void func_A() {
    printf("Here0\n");
    printf("Here1\n");
}

...

if(a < b) {
    for(i = 1; i <= 10; i++) {
        func_A()
    }
}
else if(a == b) {
    for(i = 3; i <= 7; i++) {
        func_A()
    }
}
void func_A(){
printf(“此处为0\n”);
printf(“此处1\n”);
}
...
if(a对于(i=1;i问题第1版的答案:

考虑到唯一的区别是执行语句的值的范围,您可以使用两个变量来存储范围端点,例如

int first = 0;
int last = -1;

if (condition1) {
    first = 1;
    last = 10;
} else if (condition2) {
    first = 3;
    last  = 7;
}

for ( int i = first; i <= last; i++ )
    execute set A
下面是重构后的代码

int is1 = cond1;
int is2 = is1 ? 0 : cond2;

if (is1)
    initA;
if (is2)
    initB;

while ( (is1 && condA) || (is2 && condB) )
{
    execute SetX
    if ( is1 )
        updateA;
    if ( is2 )
        updateB;
}

问题第1版的答案:

考虑到唯一的区别是执行语句的值的范围,您可以使用两个变量来存储范围端点,例如

int first = 0;
int last = -1;

if (condition1) {
    first = 1;
    last = 10;
} else if (condition2) {
    first = 3;
    last  = 7;
}

for ( int i = first; i <= last; i++ )
    execute set A
下面是重构后的代码

int is1 = cond1;
int is2 = is1 ? 0 : cond2;

if (is1)
    initA;
if (is2)
    initB;

while ( (is1 && condA) || (is2 && condB) )
{
    execute SetX
    if ( is1 )
        updateA;
    if ( is2 )
        updateB;
}

有条件地确定起始值和结束值,然后循环或使“执行集A”成为函数,甚至使循环和“执行集A”函数?有很多方法比宏更好。这不仅仅是基于起始值和结束值的循环。更新问题以获得更好的清晰度。恐怕这些半生不熟的伪代码示例无法明确说明您的需求。如果您不想复制通用代码,请将其作为单独的函数,无论它是
exec(a)
exec_A()
。您不需要说明循环之间的区别,但也可以编写一些类似迭代器的函数并有条件地确定。有条件地确定起始值和结束值,然后循环?或使“执行集A”成为函数?甚至使循环和“执行集A”函数?有很多方法比宏更好。这不仅仅是基于起始值和结束值的循环。更新问题以获得更好的清晰度。恐怕这些半生不熟的伪代码示例无法明确说明您的需求。如果您不想复制通用代码,请将其作为单独的函数,无论它是
exec(a)
exec_A()
。你不能说循环之间有什么不同,但你也可以编写一些类似迭代器的函数,并有条件地确定。集合是函数的另一种表示形式。我必须为此创建多个函数,这是我想要避免的。@rango:为什么?如果你想要一些特定的东西,我需要一个很难的例子。这就适合你的问题了如我所见。我现在已经更新了这个问题。如果你还需要更多的例子,请告诉我!!@rango:好吧,它似乎仍然适合..我建议添加实际的C语句示例和你已经尝试过的内容;这会让这里的人了解你的解决方案为什么会给你带来问题。集合是函数的另一种表示形式。我将我必须为此创建多个函数,这是我想要避免的。@rango:为什么?如果你想要一些具体的东西,我需要一个很难的例子。就我所知,这符合你的问题。我现在已经更新了这个问题。如果你还需要任何进一步的例子,请告诉我!!@rango:嗯,它似乎仍然适合。。我建议添加实际的C stateme示例nts和您已经尝试过的内容;这将让这里的人们了解为什么您的解决方案会给您带来问题。第二个版本的伪代码片段正是我的问题的精确表示。重新分解的代码是一种方法,我不必在两个位置执行/复制集合X的语句。但是,还有其他建议吗是开放的。第二个版本的伪代码片段正是我的问题的精确表示。重新分解的代码是一种方法,我不必在两个位置执行/复制集合X的语句。但是,任何进一步的建议都是开放的。