我正在尝试编写一个程序,该程序通过数字记录查找哪一个最高,代码目前在下面。我的问题是,它似乎只列出了记录中的最后一个分数(不是最高分)。非常感谢任何帮助。
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;
答案 0 :(得分:2)
您没有输出Highest
,而是TopScores[Count].Score
。只需使用
Writeln('Highest is ', Highest, ' for ', Name);
此外,您应该将名称放入if语句中的变量Name
(它实际上在外面)。
插件:如果你想要一个平局的所有名字,你可以使用例如以下代码
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;
答案 1 :(得分:1)
除了Howard的回答,在开始循环之前将'0'设置为'Highest'。未经初始化,它具有任意值,可能高于最高分。
答案 2 :(得分:0)
除了接受的答案,请务必打开警告和提示,然后您会看到:
testhighest.pp(16,39) Warning: Local variable "Highest" does not seem to be initialized
是
If TopScores[Count].Score > Highest Then
线