对BASIC中常见错误的排除
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语言中的问题。
(李刚荣)