cobol程序中的无限循环

Cod*_*man 1 cobol infinite-loop

我是旧COBOL的新手.我正在尝试在线编译器的一个例子.但是,我正在使用的代码正在进入无限循环.代码是:

IDENTIFICATION DIVISION.
PROGRAM-ID.  Conditions.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  Char               PIC X.
    88 Vowel           VALUE "a", "e", "i", "o", "u".
    88 Consonant       VALUE "b", "c", "d", "f", "g", "h"
                             "j" THRU "n", "p" THRU "t", "v" THRU "z".
    88 Digit           VALUE "0" THRU "9".
    88 ValidCharacter  VALUE "a" THRU "z", "0" THRU "9".

PROCEDURE DIVISION.
Begin.
    DISPLAY "Enter lower case character or digit. No data ends.".
    ACCEPT Char.
    PERFORM UNTIL NOT ValidCharacter
        EVALUATE TRUE
           WHEN Vowel DISPLAY "The letter " Char " is a vowel."
           WHEN Consonant DISPLAY "The letter " Char " is a consonant."
           WHEN Digit DISPLAY Char " is a digit."
           WHEN OTHER DISPLAY "problems found"
        END-EVALUATE
    END-PERFORM.
    STOP RUN.
Run Code Online (Sandbox Code Playgroud)

我的理解(只有一个粗略的想法)是PERFORM UNTIL就像同时,EVALUATE就像是开关WHEN就像案例Ç.那么,输入有效字符时循环是否应该中断?

Bil*_*ger 6

你不会在循环中改变任何东西.循环中唯一的代码是EVALUATE(不更改数据)和四个DISPLAY语句(不更改数据).

在不改变任何东西的情况下循环是无限循环.

你需要在之后加入第二个ACCEPT声明END-EVALUATE.

如果你用C编写了等价物,你也会得到一个无限循环.