我试图在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

答案 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