我正在尝试使用COBOL解决几何问题。这个问题要求我读取空格分隔的整数(其中6个代表3点的x和y坐标)。现在,当我尝试使用ACCEPT读取它们时,问题出现了。使用空格作为分隔符不会读取数字。我正在使用这个
ACCEPT AX
ACCEPT AY
ACCEPT BX
ACCEPT BY1
ACCEPT X
ACCEPT Y
DISPLAY AX
DISPLAY AY
当我输入的时候 1 2 2 1 2 2
AX包含000012212 和AY包含000000000。
所有变量的长度均为9.
DATA-DIVISION
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TP PIC X(126).
01 AX PIC S9(20).
01 AY PIC S9(20).
01 BX PIC S9(20).
01 BY1 PIC S9(20).
01 X PIC S9(20).
01 Y PIC S9(20).
01 T PIC S9(5).
01 ABC PIC S9(36).
01 ABD PIC S9(36).
01 CDA PIC S9(36).
01 CDB PIC S9(36).
这是我接受坐标字符串的部分。
ACCEPT TP.
DISPLAY TP
UNSTRING TP
DELIMITED BY ALL SPACE
INTO AX
AY
BX
BY1
X
Y
答案 0 :(得分:0)
我建议您接受1变量的所有输入,然后使用PERFORM UNTIL构造将其分解以使所有数字正确。
答案 1 :(得分:0)
如果您需要使用ACCEPT,请使用UNSTRING将数据分成字段,然后验证这些:
01 INPUT-COORDS PIC X(12).
01 XY-COORDS.
05 X-COORD-1 PIC 9.
05 Y-COORD-1 PIC 9.
05 X-COORD-2 PIC 9.
05 Y-COORD-2 PIC 9.
05 X-COORD-3 PIC 9.
05 Y-COORD-3 PIC 9.
ACCEPT INPUT-COORDS
MOVE SPACE TO XY-COORDS
UNSTRING INPUT-COORDS
DELIMITED BY ALL SPACE
INTO X-COORD-1
Y-COORD-1
X-COORD-2
Y-COORD-2
X-COORD-3
Y-COORD-3
ON OVERFLOW
do something meaningful
END-UNSTRING
然后验证这样提取的数据。
IF X-COORD-1 NOT NUMERIC, etc
我没有检查你的输入数据。只有一位数的坐标有效,你也可以考虑这个:
01 XY-COORDS.
05 X-COORD-1 PIC 9.
05 FILLER PIC X.
88 XYC-SEP1-OK VALUE SPACE.
05 Y-COORD-1 PIC 9.
05 FILLER PIC X.
88 XYC-SEP2-OK VALUE SPACE.
05 X-COORD-2 PIC 9.
05 FILLER PIC X.
88 XYC-SEP3-OK VALUE SPACE.
05 Y-COORD-2 PIC 9.
05 FILLER PIC X.
88 XYC-SEP4-OK VALUE SPACE.
05 X-COORD-3 PIC 9.
05 FILLER PIC X.
88 XYC-SEP5-OK VALUE SPACE.
05 Y-COORD-3 PIC 9.
ACCEPT XY-COORDS
然后进行与上面相同的验证,并检查分隔符是否为每个空格(使用88s)。