C KEY03 SETGTZEA010R#
C EXFMTDHA01532
C*
C LOOP01 TAG
C READPZEA010R# 50
C 50 GOTO STEP99
C*
C A1OQTY SUB A1TQTR T1BLQT 51
C T1BLQT IFGT 0
C OF EXCPTOL01
C EXCPTOL02
C GOTO LOOP01
C ELSE
C GOTO LOOP01
C END
*
C STEP99 TAG
C 50 EXCPTOL99
C 50 SETON LR
C LR RETRN
这段程序的正常结果应该是READPZEA010R,如果到了文件头,50指示器亮, 就SETON LR,程序结束。
但现在程序为什么会循环几次,请帮忙看看?我看着好像没问题,不知道哪里出了问题,头都大了。
wildfish 回复于:2004-05-21 17:22:31 |
你用代码的形式贴出来,我一看到这种代码就头晕 |
yoyoage 回复于:2004-05-22 10:53:46 |
干吗不DEBUG看看? |
kevingao 回复于:2004-05-22 22:20:31 |
DEBUG我试过了,但是找不出什么错啊 |
红像 回复于:2004-05-24 09:57:47 |
这段代码意思表达有问题。
问题1 KEY03先SETGT一下,将游标钉在一个地方(问题就在这里),然后EXFMT画面定住,这个时候改变一些域(改变得域包括KEY03里面的值吗,如果是,那么之前的SETGT就可能是将游标钉错地方了。可能会造成查询次数不足,或者多查。) 问题2 READP是一条一条读,当然会多次循环。 我个人的写法会是这样: KEY03 CHAIN 50 readp (预读一条记录,作为屏幕域的输入参数) EXFMT LOVAL SETLL (重置游标到数据库开头) CHAIN 50 *IN50 DOWEQ *OFF 处理找到的记录 READE 50 ENDDO set lr 大概这样就OK |
天海 回复于:2004-05-31 18:59:40 |
这样的代码我也看不懂 |
红像 回复于:2004-06-01 12:20:36 |
偶写的伪代码,用来说明流程的,for people, not for compiler |
aeiou 回复于:2004-06-01 13:05:27 |
你自己也说是要读到文件头才会跳出来。没有读到文件头之前会一直循环,这是正常的啊。 |
james68 回复于:2004-06-01 16:56:07 |
应该用机构化的方法来写.
最基本的少用GOTO 语句 如果这样就好看好查多了 |
james68 回复于:2004-06-01 17:12:32 |
最明显的 你看
IF ... GOTO LOOP01 ELSE GOTO LOOP01 ENDIF |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/