2015-04-23 66 views
2

我正在使用免費的Pascal 2.6.4,並且我創建了此代碼。這是一個程序,要求在文件中代表行號。除了一件事,一切都有效當我想顯示1.行時,它以「exitcode 217」停止。 爲什麼?Pascal文件處理

Program FileTruncate; 

uses 
    SysUtils; 
    label znova; 

const 
    filename = 'C:\Users\KVIKY\Desktop\Pascal\Projects\FileHandling\test.txt'; 

var 
    myfile: text; 
    line: string; 
    counter:integer; 
    position:double; 


begin 

znova: 
    Writeln('Zadaj cislo riadku: '); 
    Readln(position); 
    if position=0 then exit; 
    if position>26 then exit; 
    Assign(myfile, filename); 
    Reset(myfile); 
    counter:=0; 
Repeat 
    inc(counter); 
    readln(myfile); 
    until counter = position-1; 
    readln(myfile, line); 
    Close(myfile); 
    writeln(line); 
    Writeln('Stlacte enter pre pokracovanie.'); 
    Writeln('Zadajte 0 pre ukoncenie programu.'); 
    readln; 
    goto znova; 
end. 
+2

爲什麼你讓'position'成爲雙精度?您無法讀取第12.5或9.7行的文件;你只能讀整行。把它作爲一個整數,就像'counter'一樣。然後使用調試器遍歷代碼,以查看發生了什麼事情以及發生錯誤時的變量值。然後擺脫幾十年來一直氣餒的goto,並建立一個合適的循環。 –

+0

你好,謝謝你的建議。我沒有看到DOUBLE,但它被糾正了。其實我自己發現了錯誤。因爲如果position = 1,我有兩次readline,所以它跳了一行! :D –

回答

1

因爲當position是1,你的repeat-until條件將永遠不會被滿足(因爲你counter=1position-1是零,所以counter = position-1永遠不會發生)。

計數器表示目標前行,所以......

相反,你可以初始化不同:

counter := -1

,或者更好,你的循環更改爲while - do

while counter < position-1 do

,因爲你在迴路中有readln

+0

我已經解決了這個問題。 :)感謝您的回答。 –