@Benが提案したように、どのラウンドに最も多くのゴールがあったかだけを気にし、テキストファイルをメモリに保存する必要はないと仮定します。
その場合は、次のようなことができます。
int i, maxGoals = 0, roundWithMostGoals = 0;
for (i = 0; fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10; ++i)
{
if (maxGoals < goal1 + goal2)
{
roundWithMostGoals = runde;
maxGoals = goal1 + goal2;
}
}
// Edit:
printf("The largest number of goals was %d, scored in round %d", maxGoals, roundWithMostGoals);
このコードには問題があります。ゴール数が最大のラウンドが 2 つある場合は、最初のラウンドのみが出力されます。
これを回避するには、2 回ループする必要がありますが、これは理想的ではありません。このデータをすべてメモリにロードする、他の提案されたアプローチのいずれかを使用することをお勧めします。
ただし、最適ではないと思いますが、上記のような修正されたソリューションを次に示します。
int i, maxGoals = 0, roundWithMostGoals = 0;
// Find the maximum number of goals that was scored in any one round.
for (i = 0; fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10; ++i)
{
if (maxGoals < goal1 + goal2)
{
maxGoals = goal1 + goal2;
}
}
printf("The largest number of goals scored was %d.\n", maxGoals);
printf("The largest number of goals was scored in\n");
// TODO: Reposition the file stream back to the beginning or close it and then reopen it again.
// XXX Code Here XXX
// Loop through again getting all the rounds with the maximum number of goals.
for (i = 0; fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10; ++i)
{
if (maxGoals == goal1 + goal2)
{
printf("\tRound %d\n", runde);
}
}
しかし、これは2回ループするようになり、問題に対する最良の解決策ではありません.