问题描述
|
我正在尝试编写一个过程,该过程将遍历数字记录并找出哪个是最高的,而当前的代码则在下面。我的问题是,它似乎只是列出了记录中的最后一个分数(而不是最高分数)。任何帮助是极大的赞赏。
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;
解决方法
您没有输出
Highest
,而是TopScores[Count].Score
。只需使用
Writeln(\'Highest is \',Highest,\' for \',Name);
另外,还应该将名称放入if语句内部的变量ѭ4(实际上位于外部)。
插件:如果您希望所有姓名在打领带时都可以使用,例如以下代码
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;
,除了霍华德的答案外,在开始循环之前,请将“ 0”设置为“最高”。未初始化时,它具有任意值,可能高于最高分数。
,除了接受的答案之外,请确保您打开警告和提示,并且您将看到:
testhighest.pp(16,39) Warning: Local variable \"Highest\" does not seem to be initialized
哪一个是
If TopScores[Count].Score > Highest Then
线