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



我对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;

回答直接问题:

我收到这些错误,我不知道为什么。

原因是您在需要数值时读取非数值。

文本文件在第一行写入时记录数。然后依次跟踪记录信息。

您始终读取记录计数编号加上记录信息,并在需要记录数据时最终读取数字。


您的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;

最新更新