2016-04-22 19 views
0

こんにちは私はクラス作業に取り組んでいます。最高点と最高点を記録したプレーヤー名を表示する関数を書いています。C++で構造体を解析し、値を検索する

ここまでは私が今までに持っていることですが、ほとんどは動作しますが、ループバックして次の名前を配列に出力し始めます。私はwhileループを使ってみましたが、正しく動作するようにはできませんでした。助けてくれる人には、事前に感謝します。ここで

double temp = 0; 

for (int i = 0; i < SIZE; i++) 
{ 
    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
    } 
} 


for (int i = 0; i < SIZE; i++) 
{ 
    cout << player[i].playerName << ' '; 

    if (temp == player[i].pointsScored) 
    { 
     cout << "scored the highest points with " << temp << " points"; 
    } 
} 
+0

2番目のループでは、すべての「選手」の名前が常に*無条件に印刷されます。 –

+0

1行ですべてを印刷する以外に、出力に何の問題がありますか?すべての名前を印刷するようにプログラムしました。 – LogicStuff

答えて

0

私はこれまでのところそれは主に動作しますが、ループバックし、配列内の次の名前を印刷し始めたものです。

これを避けるには、スコアが最高のプレイヤーを見つけたらループを解除します。また、スコアが最高のプレイヤーを検索しているときに、すべてのプレイヤーの名前を印刷する必要はありません。プレーヤー名を印刷する行をifブロック内に移動します。

double temp = 0; 

for (int i = 0; i < SIZE; i++) 
{ 
    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
    } 
} 


for (int i = 0; i < SIZE; i++) 
{ 
    cout << player[i].playerName << ' '; 

    if (temp == player[i].pointsScored) 
    { 
     cout 
     << player[i].playerName << ' ' 
     << "scored the highest points with " << temp << " points"; 

     // No need to loop any more. 
     // Break out of the loop. 
     break; 
    } 
} 

また、最高得点のプレーヤーのインデックスを保存し、そのプレーヤーの情報を印刷することもできます。

int highestScoreIndex = 0; 
double temp = 0; 

for (int i = 0; i < SIZE; i++) 
{ 
    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
     highestScoreIndex = i; 
    } 
} 

cout 
    << player[highestScoreIndex].playerName << ' ' 
    << "scored the highest points with " << temp << " points"; 
+0

ありがとう、私は決勝のおかげで楽しんでいる恐らく深刻な睡眠不足を感じています。 – Brandon

1

最初のループ自体にそれを得る、プレイヤーの名前を取得するために別のループを使用しないでください。

double temp = 0; 
String name=""; 
for (int i = 0; i <= SIZE-1; i++) 
{ 

    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
     name = player[i].playerName; 
    } 

} 
cout << name <<" scored the highest points with " << temp << " points"; 

代替:(それは、より少ないスペース&を使用していますので、これより良い方が高速です)

int temp = 0; 
for (int i = 1; i < SIZE; i++) 
{ 

    if (player[i].pointsScored > player[temp].pointsScored) 
    { 
     temp =i; 
    } 

} 
cout << player[temp].playerName<<" scored the highest points with " << player[temp].pointsScored << " points"; 
+1

インデックスまたは 'Player'を格納する方が簡単です。また、出力文も表示します。 – LogicStuff

+0

はい、それもできます。 –

+0

@LogicStuff代替方法を提示する。 –

0

あなたが名前とスコアを印刷している第二のループで変更を行う必要があります。..

for (int i = 0; i < SIZE; i++) 
{ 



    if (temp == player[i].pointsScored) 
    { 
     cout << player[i].playerName << " "; 

     cout << "scored the highest points with " << temp << " points"; 
     break; 
    } 


} 

第2の解決策は、

double temp = 0; 
string tempPlayerName=""; 

for (int i = 0; i < SIZE; i++) 
{ 

     if (player[i].pointsScored > temp) 
     { 

    temp = player[i].pointsScored; 
    tempPlayerName=player[i].playerName; 
} 
} 
cout<<"Player Name who has scored highest points "<<tempPlayerName; 
cout<<" and points are "<<temp; 
関連する問題