BBC Basic中的错误下标

时间:2015-03-12 14:08:11

标签: arrays file basic

我试图在BBC Basic中创建一个数组,将电影名称和相关数据存储到文件中,然后您可以使用电影名称搜索该数据。 虽然我的数据被保存到文件中,但是我无法再次打开它以便将其打印到屏幕上,有人可以帮忙吗?当我尝试运行该程序时,它会在第105行中出现下标错误。谢谢。



   15 REM -------------------------------------------------------
   20 INPUT "How many movies would you like to add";AmountMovies
   25 X = OPENOUT("Film Directory")
   30 DIM Film$(AmountMovies,2)
   35 FOR N% = 1 TO AmountMovies
   40   PRINT "The film name was:"
   45   INPUT Film$(N%,0)
   50   PRINT "The director was:"
   55   INPUT Film$(N%,1)
   60   PRINT "The plotline is:"
   65   INPUT Film$(N%,2)
   70   PRINT ""
   75   PRINT#X, Film$(N%,0), Film$(N%,1), Film$(N%,2)
   80 NEXT N%
   85 CLOSE#X
   90 REM -------------------------------------------------------
   95 X = OPENIN("Film Directory")
  100 INPUT "What movie do you wish to search for";WhichMovie
  105 INPUT#X, Film$(N%,0), Film$(N%,1), Film$(N%,2)
  110 IF WhichMovie == Film$(N%,0) THEN
  115   PRINT "The film name is:"Film$(N%,0)
  120   PRINT "The director was:"Film$(N%,1)
  125   PRINT "The film is about:"Film$(N%,2)
  130 ENDIF




2 个答案:

答案 0 :(得分:0)

我认为这是失败的原因是因为你在第105行使用了N%。在这种特殊情况下,N%总是高于' AmountMovies'因为这是你离开FOR ... NEXT循环时留下的方式。因为你只有DIMmed和AmountMovies'您将尝试访问AmountMovies + 1时收到错误。

但是这个代码有一个更加有趣的问题。

如果你看一下它的PRINT#(第75行)部分,你会注意到它被封装在FOR ... NEXT循环中。

你的程序的第二部分应该是这样的:

 90 REM -------------------------------------------------------
 95 X = OPENIN("Film Directory")
100 INPUT "What movie do you wish to search for";WhichMovie
105 FOR N% = 1 TO AmountMovies
110  INPUT#X, Film$(N%,0), Film$(N%,1), Film$(N%,2)
115  IF WhichMovie == Film$(N%,0) THEN
120   PRINT "The film name is:"Film$(N%,0)
125   PRINT "The director was:"Film$(N%,1)  
130   PRINT "The film is about:"Film$(N%,2)
135  ENDIF
140 NEXT N%
145 CLOSE#X

这一切都是从内存中完成的,因为我无法访问BBC BASIC解释器 - 所以我对这个解决方案可能完全错了!

答案 1 :(得分:0)

改进版。注意使用线性搜索。同等运算符也是单个' ='。

 90 REM -------------------------------------------------------
 95 X = OPENIN("Film Directory")
100 INPUT "What movie do you wish to search for";WhichMovie
103 N% = 1 : found% = false
105 WHILE N%<= AmountMovies AND NOT(found%)
110  INPUT#X, Film$(N%,0), Film$(N%,1), Film$(N%,2)
115  IF WhichMovie = Film$(N%,0) THEN
120   found% = true
125  ELSE
130    N% += 1
135  ENDIF
140 ENDWHILE
145 CLOSE#x
148 IF found% THEN
150   PRINT "The film name is:"Film$(N%,0)
155   PRINT "The director was:"Film$(N%,1)  
160   PRINT "The film is about:"Film$(N%,2)
170 ELSE
175   PRINT "Not found."
180 ENDIF