2011-05-25 52 views
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; 

回答

2

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

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

你也应该把这个名字到一个变量Name if语句里面(它实际上是外)。

插件:如果你想在领带的情况下所有的名字,你可以使用例如,以下代码

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

我啊看到感谢。还修复了名称问题。感谢您指出了这一点。 也说如果两个人有相同的最高分,无论如何输出他们两个呢? – orange 2011-05-25 18:04:13

+0

@Jeff你可以如果您的循环中的TopScores [Count] .Score = Highest'在变量Name中追加新名称,并且如果真的更大,则将其替换。 – Howard 2011-05-25 18:23:45

+0

我很困惑,可能让你向我展示代码?我让它=最高,但输出只是随机的ASCII字符。 – orange 2011-05-25 18:56:15

1

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

+0

谢谢,但这样做的好处是什么,因为它没有它也可以正常工作。 – orange 2011-05-25 18:08:10

+0

@Jeff - 未初始化的局部变量保存其内存位置的值。对于一个整数,它可以是0或其他任何值,它现在可以是0,但在执行该过程时可能是其他值。如果你没有使用像FPC,Delphi这样的常用编译器,请检查你的编译器文档,如果是这样。 – 2011-05-25 18:39:05

+0

谢谢,解释了很多。 – orange 2011-05-25 18:56:31

0

除了公认的答案,请确保您打开您的警告和提示,你会看到:

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

这是

 If TopScores[Count].Score > Highest Then 

线