0

我正在尝试编写一个程序,该程序通过数字记录并找到哪个最高,当前代码如下。我遇到的问题是它似乎只是列出了记录中的最后一个分数(不是最高的)。任何帮助是极大的赞赏。

Procedure FindTopScore(Var TopScores : TTopScores);
Var
Count : Integer;
Highest : Integer;
Name: String;

Begin
     For Count := 1 to MaxSize Do
          If TopScores[Count].Score > Highest Then
     Highest := TopScores[Count].Score;
     Name := TopScores[Count].Name;
       Writeln('Higest score is by ' ,TopScores[Count].Name, ' of ', TopScores[Count].Score);
End;
4

3 回答 3

2

你不是在输出Highest,而是TopScores[Count].Score。只需使用

 Writeln('Highest is ', Highest, ' for ', Name);

此外,您应该将名称放入Nameif 语句内的变量中(它实际上在外部)。

插件:如果您想要所有名称以防出现平局,您可以使用例如以下代码

Highest := 0;
For Count := 1 to MaxSize Do Begin
     If TopScores[Count].Score = Highest Then Begin
         Name := Name + ' and ' + TopScores[Count].Name;
     End;
     If TopScores[Count].Score > Highest Then Begin
         Highest := TopScores[Count].Score;
         Name := TopScores[Count].Name;
     End;
 End;
于 2011-05-25T17:55:01.617 回答
1

除了霍华德的答案,在开始循环之前将“0”设置为“最高”。由于未初始化,它具有任意值,可能高于最高分数。

于 2011-05-25T17:59:22.627 回答
0

除了接受的答案外,请确保打开警告和提示,您将看到:

      testhighest.pp(16,39) Warning: Local variable "Highest" does not seem to be initialized

哪一个是

        If TopScores[Count].Score > Highest Then

线

于 2011-05-28T09:29:21.667 回答