COBOL新手求助:乘法表程序编译有警告且执行无输出
COBOL乘法表程序编译警告与无输出问题排查
我是COBOL完全新手,想要编写程序实现以下功能:提示用户输入1到9的数字,输出该数字的乘法表(以输入7为例,需输出7×1到7×9的结果)。编写初始代码后,按照@Rick Smith的修改建议调整了代码,编译时出现警告信息MT01.cob:34: warning: inline PERFORM without imperative statement used [-Wdialect],执行./MT01时无任何输出,请求协助排查解决该问题。
初始代码
***************************************************************** * Program name: MT01 * Original author: MYNAME * * Maintenance Log * Date Author Maintenance Requirement * --------- ------------ --------------------------------------- * 01/01/08 MYNAME Created for COBOL class * ***************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. MT01. AUTHOR. MYNAME. INSTALLATION. COBOL DEVELOPMENT CENTER. DATE-WRITTEN. 01/01/08. DATE-COMPILED. 01/01/08. SECURITY. NON-CONFIDENTIAL. ***************************************************************** ENVIRONMENT DIVISION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 X PIC 99. 01 INPUTT PIC 9. 01 RESULT PIC 9(3). PROCEDURE DIVISION. STEP0. PERFORM STEP1. PERFORM STEP2. STEP1. DISPLAY "Please give a number FROM 1 TO 9" ACCEPT INPUTT. STEP2. MOVE 0 TO X PERFORM VARYING X FROM 1 BY 1 UNTIL X > 12 END-PERFORM GO TO STEP3. STEP3. COMPUTE RESULT = X * INPUTT DISPLAY INPUTT " * " X " = " RESULT. STOP RUN.
修改后的代码
***************************************************************** * Program name: MT01 * Original author: MYNAME * * Maintenence Log * Date Author Maintenance Requirement * --------- ------------ --------------------------------------- * 01/01/08 MYNAME Created for COBOL class * ***************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. MT01. AUTHOR. MYNAME. INSTALLATION. COBOL DEVELOPMENT CENTER. DATE-WRITTEN. 01/01/08. DATE-COMPILED. 01/01/08. SECURITY. NON-CONFIDENTIAL. ***************************************************************** ENVIRONMENT DIVISION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 X PIC 99. 01 INPUTT PIC 9. 01 RESULT PIC 9(3). PROCEDURE DIVISION. STEP0. PERFORM STEP1. PERFORM STEP2. STOP RUN. STEP1. DISPLAY "Please give a number FROM 1 TO 9" ACCEPT INPUTT. STEP2. PERFORM VARYING X FROM 1 BY 1 UNTIL X > 12 PERFORM STEP3 END-PERFORM. STEP3. COMPUTE RESULT = X * INPUTT DISPLAY INPUTT " * " X " = " RESULT.
问题原因
- 编译警告:修改后的代码中,
PERFORM VARYING的语法不符合COBOL规范。标准写法要求循环体语句必须嵌套在PERFORM VARYING和END-PERFORM之间,当前PERFORM STEP3没有正确缩进嵌套,被编译器识别为无效的内联PERFORM。 - 无输出:由于循环语法错误,
STEP3中的DISPLAY语句从未被执行,因此运行时无任何输出。另外原需求是输出到×9,但代码中循环终止条件写为UNTIL X > 12,也不符合需求。
修正后的代码
***************************************************************** * Program name: MT01 * Original author: MYNAME * * Maintenance Log * Date Author Maintenance Requirement * --------- ------------ --------------------------------------- * 01/01/08 MYNAME Created for COBOL class * ***************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. MT01. AUTHOR. MYNAME. INSTALLATION. COBOL DEVELOPMENT CENTER. DATE-WRITTEN. 01/01/08. DATE-COMPILED. 01/01/08. SECURITY. NON-CONFIDENTIAL. ***************************************************************** ENVIRONMENT DIVISION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 X PIC 99. 01 INPUTT PIC 9. 01 RESULT PIC 9(3). PROCEDURE DIVISION. STEP0. PERFORM STEP1. PERFORM STEP2. STOP RUN. STEP1. DISPLAY "请输入1到9之间的数字:" ACCEPT INPUTT. STEP2. PERFORM VARYING X FROM 1 BY 1 UNTIL X > 9 PERFORM STEP3 END-PERFORM. STEP3. COMPUTE RESULT = X * INPUTT DISPLAY INPUTT " * " X " = " RESULT.
关键修正点
- 修复
PERFORM VARYING的嵌套语法,将PERFORM STEP3缩进后放入循环块内,确保循环逻辑正常执行 - 将循环终止条件改为
UNTIL X > 9,匹配输出到×9的需求 - 把提示文本改为中文,提升交互友好性
内容的提问来源于stack exchange,提问作者Adam85
相关产品推荐
相关产品推荐

