gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:31:49 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com