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