2013-08-06 69 views
1

我正在嘗試編寫一個程序來讀取一長串本書(1000本書),isbn等 但是當程序運行時,它顯示範圍溢出 的格式TXT的是Pascal運行時錯誤(範圍溢出)從文件讀取數組時

1 
1234567890 
ABC book 
peter 
20 
2 
1234567896 
... 

代碼:

const maxbk=1000; 
type bookrecord = record 
        book_no:string; 
        isbn:string; 
        book_name:string; 
        author:string; 
        borrowed:string; 
        end; 
var booklist : array[1..maxbk] of bookrecord;totalbook:integer; 

procedure readbooklist(var bklist:array of bookrecord;var totalbk:integer); 
var f:text;temp:string;code:integer; 
begin 
    totalbk:=0; 
    assign(f,'bklist.txt'); 
    reset(f); 
    while not eof(f) do 
    begin 
    readln(f,bklist[totalbk+1].book_no); 
    readln(f,bklist[totalbk+1].isbn); 
    readln(f,bklist[totalbk+1].book_name); 
    readln(f,bklist[totalbk+1].author); 
    readln(f,bklist[totalbk+1].borrowed); 
    totalbk:=totalbk+1; 
    end; 
    close(f); 
    writeln('read file done'); 
end; 

begin 
    readbooklist(booklist,totalbook); 
end. 

誰可以幫助解決這個問題?

+0

到約阿希姆伊薩克森, THX回答,但我分配1000陣列,我認爲我可以假設,我至少可以把那裏 999本書,但我的名單實際上只包含600本書籍 –

+0

信息什麼是**準確**你收到的錯誤信息? 「它顯示範圍溢出」意味着什麼都沒有,因爲我們無法從我們所在的位置看到你的屏幕,並且你有這些信息並能看到它。請[編輯]您的問題以包括它。如果您提供具體的細節,它可以幫助您更快地獲得幫助。 –

回答

1

我認爲問題在於你處理數組參數。試試這個(加粗顯示是我加的變化):

const maxbk=1000; 
type bookrecord = record 
        book_no:string; 
        isbn:string; 
        book_name:string; 
        author:string; 
        borrowed:string; 
        end; 

var booklist : array[1..maxbk] of bookrecord; totalbook:integer; 

procedure readbooklist(var bklist:array of bookrecord;var totalbk:integer); 
var f:text;temp:string;code:integer; 
begin 
    totalbk:=Low(bklist); 
    assign(f,'bklist.txt'); 
    reset(f); 
    while not eof(f) do 
    begin 
    readln(f,bklist[totalbk].book_no); 
    readln(f,bklist[totalbk].isbn); 
    readln(f,bklist[totalbk].book_name); 
    readln(f,bklist[totalbk].author); 
    readln(f,bklist[totalbk].borrowed); 
    totalbk:=totalbk+1; 
    end; 
    totalbk := totalbk - Low(bklist); 
    close(f); 
    writeln('read file done'); 
end; 

begin 
    readbooklist(booklist,totalbook); 
end. 

而且,一些選擇的空間將與可讀性幫助(如每個逗號後和周圍賦值運算符的空間)。

請注意,您的代碼(以及我提供的更改後的代碼)不會檢查輸入文本文件中的不完整記錄,也不會檢查空白行等(例如,無效的book_no值)。您應該嘗試添加一些代碼,使其對輸入文件中的問題更具彈性。正如其他人指出的那樣,可能有更好的方法來構建輸入並閱讀它。