假设,我if在for循环中有一个语句:
for( ; ; )
{
if( )
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
Run Code Online (Sandbox Code Playgroud)
现在,该break语句是否会导致编译器退出for循环,或者只有if当条件if变得满足时它才会出现?
假设我有一段Perl代码,如:
foreach my $x (@x) {
foreach my $y (@z) {
foreach my $z (@z) {
if (something()) {
# I want to break free!
}
# do stuff
}
# do stuff
}
# do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果something()是真的,我想打破('最后')所有循环.
我怎样才能做到这一点?我想到了两个选项,我不喜欢这两个选项:使用一些东西GOTO
添加一个将标记的布尔变量something()为true,在每个循环恢复之前检查这个var,last()如果它是真的.
有什么建议或想法?
谢谢.
为了扩大读者群,我通过一个详尽的(有些乏味的)现实生活例子重新阐述了我的原始问题。原始问题显示在下面。
Tom刚被聘为Acme Inc.(根据其前两个工作日的表现)担任初级软件工程师。他的工作是用编程语言Acme ++实现由高级软件开发人员设计的算法。公司按照goto首席执行官的独裁命令执行严格的“不”政策。如果汤姆在试用期内表现出色,他将在公司担任全职工作。
在第1天,Tom收到以下要实施的算法。
Step 1. START
Step 2. Input x
Step 3. In case x<0 goto Step 4 otherwise goto Step 5
Step 4. Set x=-x
Step 5. Output x
Step 6. END
Run Code Online (Sandbox Code Playgroud)
Tom认为任务非常复杂,他认为通过将其表示为流程图,可以从研究程序的抽象结构中受益。在绘制了下图第一天的流程图后,他很快意识到,他被要求计算x的绝对值,并且他可以使用简单的if-then-else语句来实现它。汤姆很高兴,他在一天结束时完成了任务。
在第2天,Tom收到以下要实施的算法。
Step 1. START
Step 2. Input x
Step 3. In case x<0 goto Step 2 otherwise goto Step 4
Step 4. Output x
Step 5. END
Run Code Online (Sandbox Code Playgroud)
作为新手,汤姆再次感到最好还是以抽象的方式理解该算法,因此他绘制了以下流程图第二天的流程图。
对流程图的检查表明,Tom被要求执行一个while循环,以等待第一个非负输入。汤姆很高兴,并在一天结束时完成了任务。
基于他出色的表现,汤姆已被公司聘用。
但是,在第3天,汤姆就陷入了深渊,因为他收到了goto由公司前雇员设计的1996年跳高的1000行算法,并且没有其他人知道算法的作用,它是如何做到的,以及为什么首先要以这种方式设计它。但是,这与Tom完全无关,因为他的唯一任务是不管算法是什么都实现该算法。凭借前两天的专业知识,他在具有1997个有向边的1000个节点上绘制了流程图。汤姆非常绝望,他在stackoverflow上询问如何处理这种混乱,有经验的程序员反复建议他这样做。
goto; …