Что касается updatescore function
, проблема возникает из вашей searchplayer function
, также когда вы искали, вы не должны снова использовать key
в updatescore function
. После поиска вам понадобится if-else
in updatescore function
:
for (i = 0; i < 5; i++)
{
int num = searchplayer();
if (num == 1)
{
statement;
}
else
{
statement;
}
}
, посмотрите:
int searchplayer(void)
{
printf("\nEnter your player ID");
scanf("%d", &key);
for (i = 0; i < 5; i++)
{
if (playerstats[i].id == key)
{
return 1;
}
}
return -1;
}
в вашем коде, если введен первый идентификатор игрока, вы введете if statement
и вернуть 1
, но, например, если вы введете идентификатор второго игрока, поскольку для i=0
это if (playerstats[i].id == key)
неверно, функция всегда будет возвращать -1
, и поэтому в вашем updatescore function
вы всегда будете заканчиваться invalid id
.
также вы должны поставить scanf("%d", &key);
из l oop, потому что с одним ключом вы должны проверить if (playerstats[i].id == key)
, а не 5 ключей.
для вашей playerranking function
для сортировки struct вы должны сделать это вручную следующим образом:
void playerranking()
{
char inittmp[3];
int idtmp;
int temp, swapped;
while (1)
{
swapped = 0;
for (i = 0; i < 5 - 1; i++)
{
if (playerstats[i].score < playerstats[i + 1].score)
{
temp = playerstats[i].score;
playerstats[i].score = playerstats[i + 1].score;
playerstats[i + 1].score = temp;
idtmp = playerstats[i].id;
playerstats[i].id = playerstats[i + 1].id;
playerstats[i + 1].id = idtmp;
strcpy(inittmp , playerstats[i].init);
strcpy(playerstats[i].init , playerstats[i + 1].init);
strcpy(playerstats[i + 1].init , inittmp);
swapped = 1;
}
}
if (swapped == 0)
{
break;
}
}
printf("\n\n");
displaystats();
welcome();
}
с сортировкой одного члена struct
, это не будет автоматически сортировать других участников, вы должны сделать это самостоятельно.