go to定义-如何在COBOL中使用go to



在我的一个COBOL程序中有以下代码片段:

IF  FIRST < SECOND
   MOVE FIRST TO WS
END-IF.
MOVE SECOND TO WS.
MOVE WS TO RESULT.

我需要在IF块内使用GO to来跳转到最后一条语句(MOVE WS to RESULT)。

IF  FIRST < SECOND
   MOVE FIRST TO WS
   GO TO <last line.(MOVE WS to RESULT)>
END-IF.
MOVE SECOND TO WS.
MOVE WS TO RESULT.

换句话说,我需要跳过"MOVE SECOND to WS."。
在cobol中跳转到特定行最简单的方法是什么?我在某处读到,这可以通过定义一个段落,但不知道如何定义它。

这可能看起来很简单,但我是COBOL编程的新手。

谢谢。

----------------* UPDATE *----------

基于@ lawrence解决方案,这是正确的吗?

IF  FIRST < SECOND
     MOVE FIRST TO WS
     GO TO C10-END.
  END-IF.
  MOVE SECOND TO WS.
C10-END.
MOVE WS TO RESULT.

我只是把最后一条语句移到了第一级。

GOTO可以做你想要的,但是IF/ELSE会更直接。如果IF块不运行,您希望MOVE SECOND TO WS运行,对吗?

IF  FIRST < SECOND
    MOVE FIRST TO WS
ELSE
    MOVE SECOND TO WS
END-IF.
MOVE WS TO RESULT. 

我希望我的语法是正确的,我从来没有使用过COBOL,只是试图完成你的代码片段和这个例子http://www.fluffycat.com/COBOL/If-and-End-If/。将来可能会有需要GOTO的情况,但是A)当另一种控制结构可以工作时应该避免,B)我不知道它是如何完成的

老实说,COBOL看起来很糟糕哈哈。我从未见过一种语言如此冗长。祝你一切顺利


编辑

主要是给joe…

难道这些都不能用最小函数更好地完成吗?我确定语法是错误的,但是:

Move Function Min(FIRST, SECOND) to RESULT

OMFSM!现在不是1974年,你为什么要这样写Cobol ?:

IF  FIRST < SECOND
   MOVE FIRST TO WS
END-IF.
MOVE SECOND TO WS.
MOVE WS TO RESULT.

有很多问题:

  • 它使用句号来划定范围,这是近三十年来被弃用的。
  • 没有使用ELSE
  • 正在尝试使用GO to .

我建议从1985年开始采取以下做法:

If FIRST < SECOND
  Move FIRST to WS
Else
  Move SECOND to WS
End-IF
Move WS to RESULT

但实际上,代码应该简单地读为:

If FIRST < SECOND
  Move FIRST to RESULT
Else
  Move SECOND to RESULT
End-If

除非WS中需要中间结果。Cobol 66和74使用GOTO和句号是因为它们缺乏现代控制结构。我知道你是一个"新手",但你应该建议教你的人,他们真的需要提升他们的技能。

jon_darkstar在改进逻辑方面是正确的,但是如果你想看看GO TO是如何工作的,这里是:

  IF  FIRST < SECOND
     MOVE FIRST TO WS
     GO TO C10-RESULT.
  END-IF.
  MOVE SECOND TO WS.
C10-RESULT.
  MOVE WS TO RESULT.

C10-RESULT.开始一个段落,必须是一个唯一的名称在你的代码段。按照惯例,它也应该以与封闭部分相同的前缀开始。因此,本示例假设代码SECTION类似于C00-MAIN-PROCESS SECTION.

一个新的非答案让这个愚蠢的问题变得清晰起来。

IF中的

ELSE是100%明显的答案。必须使用GO TO而不能使用ELSE,这是非常奇怪的。

另一种方式,惊讶它没有出现:

MOVE SECOND TO WS
IF  FIRST LESS THAN SECOND
   MOVE FIRST TO WS
END-IF
MOVE WS TO RESULT

No ELSE, No GO TO。当第一个小于第二个时执行额外的MOVE。

包含GO To很简单,但很愚蠢。添加一个GO TO。GO TO必须去某个地方(除非使用ALTER…)继续进行……(每个人都希望你不是),所以在你想要它到达的地方做一个标签,并将该标签的名称添加到GO to .

标签是用户自定义的词。如果被引用(在这种情况下),它在SECTION中必须是唯一的,如果你使用SECTIONs,你不需要,否则在程序中是唯一的,无论是否被引用,它可能与其他东西(如数据定义或文件的内部名称)不相同。

标签是过程名。过程名应该以句号/句号结束,过程本身也应该以句号/句号结束。

MOVE FUNCTION MIN ( ... ) ...作为一种解决方案呢?

好吧,它起作用了。如果你网站上的其他工作人员不习惯它,你使用它(无论如何,没有事先讨论)将不会得到感谢。

它是做什么的?那么,在Enterprise COBOL中,编译器生成一个额外的小区域,将第一个参数复制到该区域,针对第二个参数进行测试,复制第一个参数的副本,或者第二个参数的副本,无论哪个与结果相关。

与ELSE相比,这是一个额外定义的存储区域,一个额外的可寻址指令,一个额外的汇编器移动(MVC)加上缺乏就绪识别。

更适合刚接触COBOL、习惯了其他语言中的大量函数的程序员吗?不完全是,因为如果他们写不出其他员工(凌晨2点)能理解的程序,他们就会被彻底打败。

IF FUNCTION MIN(VAR1 VAR2 VAR3 VAR4 VAR5) = 17

这是FUNCTION的另一个缺点。你看,你能做到的。然后,在凌晨2点,当程序崩溃32行之后,在更改了VAR1和VAR3之后,您是否能够在核心转储中找到该IF的结果?也许是,也许不是。取决于是否使用了其他函数,以及使用了什么类型的函数。在凌晨2点,你不会想要这样。一点也不。

的好处是,它减少了输入。对于那些打字的人,而不是使用编辑器。

在我们的商店中,我们将使用Bill Woodger提供的示例。但是,我们确实使用句号作为作用域结束符。COBOL应该结构化并使用KISS原则,就像任何其他语言一样。:

<>之前第二步到第二步。如果第一个少于第二个首先是ws。行动是为了结果。之前

注意,只有当我们确信SECOND和FIRST有数字值,或者WS是一个PIC X()字符串,而不是一个数字PIC 9()时,这才有效。这是迄今为止最容易读懂的。

相关内容

  • 没有找到相关文章

最新更新