Avatar billede mpkj Nybegynder
18. maj 2005 - 23:57 Der er 5 kommentarer

C: Highscore fra txt der skal bubblesortes..

Jeg er ved at lægge allersidste hånd på mit spil, og highscore funktionen fungerer som den skal, lige bortset fra at den ikke er sorteret efter point..

Jeg adder en bruger og hans score når han gennemfører spillet sådan her:

fprintf(high,"%s %d\n", player1, score1);


og her er hele koden når jeg skal displaye highscoren fra mainmenuen:

void showall()
{
  system("cls");
  int i, n, score[25];
  char line[100], name[25][100],*p;
  FILE *high = fopen("high.txt","r");
  if(high==NULL) return;

  n = 0;
  while(!feof(high))
  {
      if(!fgets(line,sizeof(line),high)) break;
      p = strrchr(line,' ');
      score[n] = atoi(p);
      *p = '\0';
      strcpy(name[n],line);
      n++;
  }
  fclose(high);
  for(i=0;i<n;i++)
  {
      printf("%s %d\n",name[i],score[i]);
  }
system("pause");
main();



Jeg ved godt at det ikke er verdens smukkeste programmeringsprog, men det bliver rettet som sidste ting:) -lige nu vil jeg gerne kunne sortere min highscore efter point (med bubblesort?).


MVH MPKJ
Avatar billede bertelbrander Novice
19. maj 2005 - 00:01 #1
Du skal starte med at samle navn og score i en struct, så kan du bruge qsort(...) til at sortere (eller lave din egen sort).
Avatar billede arne_v Ekspert
19. maj 2005 - 00:05 #2
prøv noget a la:

for(i=0;i<n-1;i++)
{
  for(j=i+1;j<n;j++)
  {
      if(score[i]<score[j])
      {
        tmpscore = score[i];
        score[i] = score[j];
        score[j] = tmpscore;
        strcpy(tmpname,name[i]);
        strcpy(score[i],score[j]);
        strcpy(score[j],tmpscore);
      }
  }
}
Avatar billede bertelbrander Novice
19. maj 2005 - 00:14 #3
Med qsort (utestet):

typedef struct HighScoreEntry
{
  char name[100];
  int score;
}HighScoreEntry;

int SortFunc(const void *p1, const void *p2)
{
  HighScoreEntry *e1 = (HighScoreEntry *)p1;
  HighScoreEntry *e2 = (HighScoreEntry *)p2;
  return e1->score < e2->score;
}

void showall()
{
  system("cls");
  HighScoreEntry HighScore[25];
  int i, n;
  char line[100], *p;
  FILE *high = fopen("high.txt","r");
  if(high==NULL) return;

  for(n = 0; n < 25 && fgets(line,sizeof(line),high); n++)
  {
      p = strrchr(line, ' ');
      HighScore[n].score = atoi(p);
      *p = '\0';
      strcpy(HighScore[n].name, line);
  }
  fclose(high);
  qsort(HighScore, n, sizeof(HighScoreEntry), SortFunc);
  for(i=0;i<n;i++)
  {
      printf("%s %d\n", HighScore[i].name, HighScore[i].score);
  }
}

Bemærk at din kode vil fejle hvis der er mere end 25 linier i filen.
Avatar billede arne_v Ekspert
28. maj 2005 - 16:23 #4
mpkj ?
Avatar billede arne_v Ekspert
24. juli 2005 - 17:09 #5
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester