对BASIC中常见错误的排除

Author: 李刚荣 Date: 1995-12-08

        10 FOR I=1 TO 10
        20 PRINT I
        30 NEXT J
        40 END
        运行时报“NEXT Without FOR in 30”的错误,原因是FOR语句和NEXT语句的循环变量不匹配。类推,在程序中的不匹配还包括WHILE和WEND、GOSUB和RETURN不匹配等。
        2.非法函数调用。发生此种错误的原因可能有:试图对一负数求非整数次幂;对函数或语句给出不恰当的自变量;未用DEF USR语句确定机器语言子程序的起始地址就调用USR函数;在GET或PUT(文件)操作时出现负记录号等。例如,在SQR(X)中,X<0;或在MID$(X$,I,J)中 ,i=0;或把logA写成了LOG(A),e4写成了E↑4,Sin45°写成了Sin(45)等,均会出现“Illegal function call”的错误。
        3.PRINT语句出错。例如:
        10 PRINT X=SIN(3.141592/45)
        20 END
        RUN
        0
        程序的运行结果出乎预料,这是因为PRINT语句只能显示变量或表达式的值,而没有赋值的功能。要想正确显示X的值,应把语句10改为:
        10 PRINT "X=";SIN(3.141592/45)
        4.缺少数据。READ语句与DATA语句必须配合作用。不能只有READ而无DATA;或DATA语句中的数据个数少于READ语句读取变量的个数;或READ语句读取变量的顺序、类型与DATA语句的不一致,都会出现“Out of data”的错误信息。例如:
        10 READ A,B,C
        20 PRINT "A=";A,"B=";B,"C=";C
        30 END
        40 DATA 2,4
        RUN
        Out of data in 10
        表示DATA语句提供的数据个数不够,语句10已无数据可读。
        5.数组下标越界。例如:
        10 DIM A(20)
        20 FOR I=0 TO 21
        30 LET A(I)=I*I
        40 PRINT I,"A(";I;"(=";A(I)
        50 NEXT I
        60 END
        RUN
        Subscript out of rangein 30
        这是因为元素中的下标超 出了定义的数组下标范围,将第20句改为“20 FOR I=0 TO 20”,即可正常运行。
        6.程序运行出现死循环。例如:
        100 INPUT X
        …
        50 GOTO 100
        运行这一段程序将反复执行100-500语句,永远不会停止,除非按Ctrl-Break键强行终止。造成这种错误的原因是不会使用终止标志来结束循环,如果改成:
        100 INPUT X
        110 IF X=-1 THEN 510
        …
        500 GOTO 100
        510 END
        程序运行中当从键盘输入-1时就可以正常结束。
        除了上面讨论的几种错误外,还有溢出、重复定义数组、以零作除数、字符串太长、调用了未定义的用户函数、设备I/O错、记录号错、磁盘写保护等等。由于错误的表现形式可能是多种多样的,因此其错误信息也会随之不同。用户在熟悉了BASIC语言的基础上,恰当地运用排除错误的各种方法,同时通过多编程、多上机,就一定能积累丰富的经验,解决自己在使用BASIC语言中的问题。
        (李刚荣)