相关疑难解决方法(0)

`break`只适用于`for`,`while`,`do-while`,`switch'和`if`语句?

假设,我iffor循环中有一个语句:

for( ; ; )
{
  if( )
    {
     printf(" inside if");
     break;
    }//if         

  printf("inside for");
}//for
Run Code Online (Sandbox Code Playgroud)

现在,该break语句是否会导致编译器退出for循环,或者只有if当条件if变得满足时它才会出现?

c break

33
推荐指数
3
解决办法
7万
查看次数

如何在Perl中打破外部循环?

假设我有一段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()如果它是真的.

有什么建议或想法?

谢谢.

perl loops break flow-control

23
推荐指数
2
解决办法
2万
查看次数

如何将流程图转换为实现?

编辑:简介

为了扩大读者群,我通过一个详尽的(有些乏味的)现实生活例子重新阐述了我的原始问题。原始问题显示在下面。

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上询问如何处理这种混乱,有经验的程序员反复建议他这样做。

  1. 将程序分解为较小的部分;和
  2. 他确信在某些情况下实际上可以使用goto; …

compiler-construction algorithm math build-automation

4
推荐指数
1
解决办法
1927
查看次数