代码在Pascal中出现106错误,我不确定为什么

时间:2018-04-15 23:14:36

标签: pascal

我仍然是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;

1 个答案:

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