从二进制文件读取到记录数组

时间:2014-03-31 19:26:23

标签: arrays pascal

难以将数据从二进制文件读取到一个简单的记录数组中,其中数组是固定的(通过常量= 3)。我已经在论坛上寻找解决方案,但没有快乐。

这是我的数组结构:

Const NoOfRecentScores = 3;
Type
  TRecentScore = Record
                   Name : String[25];
                   Score : Integer;
                 End;

  TRecentScores = Array[1..NoOfRecentScores] of TRecentScore;

Var
  RecentScores : TRecentScores;

这是我的程序,试图从二进制文件中加载3个分数......

Procedure LoadRecentScores (var RecentScores:TRecentScores);
var MasterFile: File of TRecentScore;
    MasterFileName: String;
    count:integer;
Begin
  MasterFileName:='HighScores.bin';
  if fileexists(MasterFileName) then
    begin
      Assignfile(MasterFile, MasterFilename);
      Reset(MasterFile);

      While not EOF(MasterFile) do
        begin
          Read(Masterfile, RecentScores[count]); // issue with this line?
          count:= count +1 ;
        end;
      Writeln(Count, ' records retrieved from file. Press ENTER to continue');
      close(Masterfile);
    end
  else
    begin
      Writeln('File not found. Press ENTER to continue');
      readln;
    end;
end;  

这个问题似乎与评论界线有关......这里的问题是什么?当我编译并运行程序时,它意外退出。

1 个答案:

答案 0 :(得分:2)

首次使用前,您需要初始化count。 (你可能也应该包含一个转义,如果你获得的数据超出你的代码所期望的数据,就不要在数组的末尾运行。)

count := 1;
while (not EOF(MasterFile)) and (Count <= NoOfRecentScores) do
begin
  Read(MasterFile, RecentScores[count];
  Inc(Count);  // or Count := Count + 1;

end;

局部变量未在Pascal中初始化,这意味着在分配值之前,它们可以包含任何随机内存内容。