cobol - 此 COBOL 代码中是否存在无限循环原因?

标签 cobol sample

我是 COBOL 编程的新手,所以我试图制作一个示例计算器,但我无法让它工作。 calc 进入无限循环,我没有找到原因,我什至尝试复制类似的代码,但没有成功。那么,这是 OpenCobolIDE 问题还是代码问题?

代码:

   IDENTIFICATION DIVISION.
   PROGRAM-ID. Loops.
   ENVIRONMENT DIVISION.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   77 WSS-FIRSTOP          PIC S9(05)V9(04).
   77 WSS-SECONDOP         PIC S9(05)V9(04).
   77 WSS-RESULT           PIC S9(10)V9(04).
   77 WSS-OPERATOR         PIC A(01).
   77 WSS-CHOICE           PIC X(01).

   PROCEDURE DIVISION.
   LOOP SECTION.
   PERFORM 0001-STARTCALC UNTIL WSS-CHOICE = 2.

   STOP RUN.
   STARTING SECTION.
   0001-STARTCALC.
       DISPLAY "1.- CALCULATOR, 2.- EXIT".
       DISPLAY "ENTER:", ACCEPT WSS-CHOICE.
       IF WSS-CHOICE = 1
           PERFORM 0002-DATAREQUEST
           PERFORM 0003-OPERATIONS
       ELSE IF WSS-CHOICE = 2
           STOP RUN
       ELSE
           DISPLAY "ERROR. INVALID OPTION.".

   0002-DATAREQUEST.
   CHOICE SECTION.
       DISPLAY "CALCULATOR 1.0".
       DISPLAY "ENTER 1ST OPERATOR:".
       ACCEPT WSS-FIRSTOP.
       DISPLAY "ENTER 2ND OPERATOR".
       ACCEPT WSS-SECONDOP.
       DISPLAY "CHOOSE OPERATION TO PERFORM:".
       DISPLAY "A: ADD, S: SUBTRACT, M: MULTIPLY, D: DIVISION".
       ACCEPT WSS-OPERATOR.

   0003-OPERATIONS.
   OPERATIONS SECTION.
       IF WSS-OPERATOR =                   "A"
           ADD WSS-FIRSTOP TO WSS-SECONDOP GIVING WSS-RESULT
           DISPLAY "ADDITION RESULT: ",    WSS-RESULT
       ELSE IF WSS-OPERATOR =              "S"
           SUBTRACT WSS-FIRSTOP FROM WSS-SECONDOP GIVING WSS-RESULT
           DISPLAY "SUBTRACTING RESULT: ", WSS-RESULT
       ELSE IF WSS-OPERATOR =              "M"
           MULTIPLY WSS-FIRSTOP BY WSS-SECONDOP GIVING WSS-RESULT
           DISPLAY "MULTIPLYING RESULT: ", WSS-RESULT
       ELSE IF WSS-OPERATOR =              "D"
           DIVIDE WSS-SECONDOP INTO WSS-FIRSTOP GIVING WSS-RESULT
           DISPLAY "DIVIDING RESULT: ",    WSS-RESULT
       ELSE
           DISPLAY "INVALID OPERATOR. CHECK".

最佳答案

The calc enter in an infinite loop [...], is it a OpenCobolIDE problem or it's the code?

我认为两者都是。没有任何显示可能发生无限循环的主要原因很可能是 OCIDE 没有合适的终端。在单独的终端上运行相同的程序应该至少导致在进入循环之前显示 + 接受。如果我没记错的话,OCIDE 的首选项中有一些选项可以调整终端的行为方式。

代码“看起来”像一个无限循环的原因是(正如@bruce-martin 提到的)段落和节的错误使用。如果要保留两者,则需要在段落结束时将节标题放在段落之前(如果定义了新段落或定义了节)。

注意:节和段落的使用通常是公司/团队定义的:如果不是(与任何编程语言一样)并且您编辑现有程序:使用无论旧代码做什么 - 对于新代码:随心所欲。 (我的个人偏好是只在我想GOTO时使用段落并且总是使用EXIT SECTION来离开一个部分而不是GOTO mysec-end)

要解决可能的问题:使用文字 '1' 或数字 WSS-CHOICE PIC 9 [对于终端 i/o,我总是更喜欢字母数字 +文字]。正如您所提到的,您是第一次了解 COBOL:一定要查看 EVALUATE WSS-OPERATOR

关于cobol - 此 COBOL 代码中是否存在无限循环原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61134532/

相关文章:

cobol - 有没有办法使用 INSPECT TALLYING 检查多个字符?

ibm-midrange - 无法显示排序值,值缺失

javascript - 工厂、服务和依赖注入(inject)在 angular.js 中到底意味着什么

cobol - cobol中的组变量

java - 通过cobol描述符解析数据时将小数点放在正确的位置

android - 当我输入正确的服务器设置时,alfresco 的 android sdk 示例崩溃

r - 加快 R 中的概率加权采样

r - R中的多个不同的随机样本

dicom - 需要一些样本 dcm 文件用于结构报告(超声波)

cobol - 在 COBOL 中填充数组时出现问题