Solved

# Struct and sort based on a field - how do I do that ?

Posted on 2004-09-25
204 Views
I have the following code.
I need to find the highest scorer & dysplay that.
How do I include a sort system - perhaps a bubble sort to dysplay the info ?

My full code:
/*=================================*/
#include <iostream.h>
#include<stdio.h>
#define team 5

struct player_rec {
char name[15];
int score;
int rebounds;
int assists;
}stars[team]; /*declering a global structure type*/

void findmax(struct player_rec *pt); /*Function Prototype */

main()
{
struct player_rec stars[team]={ {"sam",10,6,2}, {"dan",12,9,1}, {"jim",2,10,0},{"james",0,4,9}, {"nick",20,1,0} };

int i,maxscore;
for(i=0; i<team; i++)
/* **************************************************************/
maxscore = stars[0].score;      /* NOTE: IF i delete this stub of code, i get 5 player's record.*/
if (stars[i].score < maxscore)      /* but i need the best scorer's record only.*/
stars[i].score = maxscore ;      /* so i have to fix this portion of the code.*/
/***************************************************************/

findmax(stars + i);/* calling this function will traverse entire array
* and find best scorer*/
return;

};

void findmax(struct player_rec *pt)  /* Function Header*/
{

printf("the maximum scorer is:%s\n",pt->name);
printf("the maximum score is:%d\n", pt->score);
printf("the maximum rebound is:%d\n",pt->rebounds);
return ;
}

0
Question by:aftab2003
• 2
• 2

LVL 55

Accepted Solution

Jaime Olivares earned 125 total points
ID: 12152474
I think you need some retouches. There are many alternatives, here is simple one:

main()
{
struct player_rec stars[team]={ {"sam",10,6,2}, {"dan",12,9,1}, {"jim",2,10,0},{"james",0,4,9}, {"nick",20,1,0} };

int i,maxscore,themax;
maxscore = stars[0].score;

for(i=0; i<team; i++) {
if (stars[i].score >= maxscore)
themax = i;
}

findmax(stars + themax);
};

0

LVL 1

Expert Comment

ID: 12152922
I dont think jaime's code will funciton properly.  I suggest:

int i,bestplayer; // index of player with the highest score
bestplayer = 0;

for(i=1; i<team; i++) {
if (stars[i].score > stars[bestplayer].score)
bestplayer = i;
}
0

LVL 55

Expert Comment

ID: 12152975
>I dont think jaime's code will funciton properly.
Have you tested it? Maybe you can explain us why.
0

LVL 1

Expert Comment

ID: 12156413
what was bugging me was:

maxscore = stars[0].score;
for(i=0; i<team; i++) {
if (stars[i].score >= maxscore)
themax = i;
}

in this loop, maxscore is never updated, so you will just find any player with more points than star 0.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question