在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的语句。但是,任何进一步的建议都是开放的。