我仍然是Pascal的新手,我遇到了这些错误,我不知道为什么。一些帮助将不胜感激。
Runtime error 106 at $004015DFF
$004015DF
$004016D2
$004016FD
$004078D1
如果你们想看一下,这是我的代码。
program BasicReadWrite;
type
ArrayOfPersons = record
name: String;
age: String;
end;
procedure WriteLinesToFile(var myFile: TextFile);
begin
WriteLn(myFile, 5);
WriteLn(myFile, 'Fred Smith');
WriteLn(myFile, 28);
WriteLn(myFile, 'Jill Jones');
WriteLn(myFile, 54);
WriteLn(myFile, 'John Doe');
WriteLn(myFile, 15);
WriteLn(myFile, 'Samantha Pritchard');
WriteLn(myFile, 19);
WriteLn(myFile, 'Hans Fredrickson');
WriteLn(myFile, 77);
end;
procedure PrintRecordsToTerminal(personArray: ArrayOfPersons; count:
Integer);
begin
WriteLn('Person name: ', personArray.name);
WriteLn('Age: ', personArray.age);
end;
procedure ReadLinesFromFile(var myFile: TextFile);
var
p: ArrayOfPersons;
number: Integer;
begin
number := 0;
while number <= 19 do
begin
ReadLn(myFile, number);
ReadLn(myFile, p.name[number]);
ReadLn(myFile, p.age);
number := number + 1;
end;
end;
答案 0 :(得分:2)
回答直接问题:
我收到这些错误,我不确定原因。
原因是当您需要数字值时,您正在读取非数字值。
使用第一行的记录数写入文本文件。然后一个接一个地跟踪记录信息。
您总是在读取记录计数和记录信息,最后在预期记录数据时读取数字。
您声明ArrayOfPersons
时出现问题。该名称暗示一个数组,但声明表示单个记录。数字索引用于读取名称的单个字符,而不是记录的数组元素。修正声明并正确索引记录。
const cMaxPersons = 20;
type
TPerson = record
name: String;
age : Integer;
end;
ArrayOfPersons = array[0..cMaxPersons-1] of TPerson;
procedure ReadLinesFromFile(var myFile: TextFile);
var
p: ArrayOfPersons;
i,number: Integer;
begin
ReadLn(myFile, number);
if number <= cMaxPersons then
begin
for i := 0 to number-1 do
begin
ReadLn(myFile, p[number].name);
ReadLn(myFile, p[number].age);
end;
end;
end;