You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.     

问题原因

  1. 编译警告:修改后的代码中,PERFORM VARYING的语法不符合COBOL规范。标准写法要求循环体语句必须嵌套在PERFORM VARYING和END-PERFORM之间,当前PERFORM STEP3没有正确缩进嵌套,被编译器识别为无效的内联PERFORM。
  2. 无输出:由于循环语法错误,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:30:57