【发布时间】:2016-04-27 19:59:07
【问题描述】:
如何在没有 goto 和额外过程调用的情况下编写示例代码?
for(i=0;i<imax;i++)
{ for(j=0;j<jmax(i);j++)
{ for(c=0;c<cmax(j);c++)
{ if(!check1(c))
{ if(check2()) goto ni;
else goto nj;
}
}
// **EDIT** procedure call is here
nj:;
}
ni:;
}
【问题讨论】:
-
使用
break而不是goto? -
状态机设计?在每个循环上实现状态并检查使用 continue(s) 和/或 break(s)
-
使嵌套循环中的所有条件为假(根据您要跳出的数字),然后从最里面的循环中跳出。在此处检查后您没有代码,但请注意,“父”循环中的任何代码都将在中断前再执行一次。
-
顺便说一句,goto 本身并没有什么问题,在大多数情况下它只会导致代码极其混乱,但你不必为了避免
goto而编写混乱的代码 -
跳出嵌套循环是
goto是最干净的解决方案的其余情况之一。