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

代码在Pascal中出现106错误,我不知道为什么,pascal,Pascal,我对帕斯卡还是相当陌生的,我会犯这些错误,我不知道为什么。我们将非常感谢您的帮助 Runtime error 106 at $004015DFF $004015DF $004016D2 $004016FD $004078D1 如果你们想看的话,这是我的代码 program BasicReadWrite; type Arra

我对帕斯卡还是相当陌生的,我会犯这些错误,我不知道为什么。我们将非常感谢您的帮助

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=记录
名称:字符串;
年龄:弦;
结束;
过程WriteLinesToFile(var myFile:TextFile);
开始
WriteLn(myFile,5);
WriteLn(我的文件“Fred Smith”);
WriteLn(myFile,28);
WriteLn(我的文件“吉尔·琼斯”);
WriteLn(myFile,54);
WriteLn(我的文件“John Doe”);
WriteLn(myFile,15);
WriteLn(我的文件“Samantha Pritchard”);
WriteLn(myFile,19);
WriteLn(我的文件“Hans Fredrickson”);
WriteLn(myFile,77);
结束;
程序PrintRecordsToTerminal(personArray:ArrayOfPersons;计数:
整数);
开始
WriteLn('人名:',personArray.name);
WriteLn('Age:',personArray.Age);
结束;
过程ReadLinesFromFile(var myFile:TextFile);
变量
p:阵列天线;
数字:整数;
开始
编号:=0;

而数字回答直接问题:

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

原因是您正在读取一个非数值,而实际需要的是一个数值

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

您总是在读取记录计数加上记录信息,并在需要记录数据时读取一个数字



您的
arrayofperson
声明有问题。名称表示数组,但声明表示单个记录。数字索引用于读取名称的单个字符,而不是记录的数组元素。修复声明并正确索引记录

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;
constcmaxpersons=20;
类型
TPerson=记录
名称:字符串;
年龄:整数;
结束;
ArrayOfPersons=TPerson的数组[0..cMaxPersons-1];
过程ReadLinesFromFile(var myFile:TextFile);
变量
p:阵列天线;
i、 数字:整数;
开始
ReadLn(我的文件,编号);

如果数字要回答直接问题:

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

原因是您正在读取一个非数值,而实际需要的是一个数值

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

您总是在读取记录计数加上记录信息,并在需要记录数据时读取一个数字



您的
arrayofperson
声明有问题。名称表示数组,但声明表示单个记录。数字索引用于读取名称的单个字符,而不是记录的数组元素。修复声明并正确索引记录

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;
constcmaxpersons=20;
类型
TPerson=记录
名称:字符串;
年龄:整数;
结束;
ArrayOfPersons=TPerson的数组[0..cMaxPersons-1];
过程ReadLinesFromFile(var myFile:TextFile);
变量
p:阵列天线;
i、 数字:整数;
开始
ReadLn(我的文件,编号);

如果您已将文件包含的记录数写入文件;那是“5”。你要读20张唱片。你应该在while循环之前读“number”,然后从0循环到number-1。哦,但是number不是年龄吗?我希望能够记录多达20个数组,那么我该如何做呢?您的
ArrayOfPersons
声明有问题。名称表示数组,但声明表示单个记录。而
编号
索引用于读取名称的单个字符,而不是记录的数组元素。修正声明并正确索引记录。
ProgramBasicReadWrite;类型ArrayOfPersons=记录名称:字符串数组;年龄:字符串数组;结束其中
TPerson=记录名称:字符串;年龄:整数;结束。根据pascal编译器的不同,您可能需要有一个静态数组声明:
ArrayOfPersons=TPerson的数组[1..xx]
对于数组的索引:
personArray[number].name
就是一个例子。您已经将文件包含的记录数写入了该文件;那是“5”。你要读20张唱片。你应该在while循环之前读“number”,然后从0循环到number-1。哦,但是number不是年龄吗?我希望能够记录多达20个数组,那么我该如何做呢?您的
ArrayOfPersons
声明有问题。名称表示数组,但声明表示单个记录。而
编号
索引用于读取名称的单个字符,而不是记录的数组元素。修正声明并正确索引记录。
ProgramBasicReadWrite;类型ArrayOfPersons=记录名称:字符串数组;年龄:字符串数组;结束其中
TPerson=记录名称:字符串;年龄:整数;结束。根据pascal编译器的不同,您可能需要有一个静态数组声明:
ArrayOfPersons=TPerson的数组[1..xx]
对于数组的索引:
personArray[number].name
就是一个例子。