구조체배열의 데이터를 오름차순으로정렬하는 프로그램
조으다
질문 제목 :
구조체 배열에서 오름차순으로 석차구하기
실행하면 에러는 없으나 결과가 아래와 같이 출력됨
lee, 0.000...
choe 0.000...
im, 0.000...
의도하는 출력결과는 성적순으로 이름과 평균이 함께 출력되는 것임
어느 부분에 문제가 있는지 설명 부탁드립니다.
질문 내용 :
#includestdio.h
typedef struct student{ //구조체 정의
char name[20];
int kor,eng,mat,tot;
float avg;
}students;
void sort(students *data); //사용자정의 함수
void main()
{
int a;
students data[10]={ //데어터베이스에 10건의 테이터가 입력되어있음
{kang,90,85,90},{gwak,80,100,85},
{kim,100,90,95},{roh,90,70,70},{mun,70,65,80},
{su,70,80,70},{lee,90,90,85},{choe,100,90,80},
{im,80,65,90},{jeon,100,100,100}
};
sort(data); //사용자정의 함수로 넘어가 실행
}
void sort(students *data){ //오름차순으로 정렬?
int i,j,tot;
float avg,temp;
for(i=0; i=9; i++) //총점과 평균을 구함
data[i].tot=data[i].kor+data[i].eng+data[i].mat;
data[i].avg=(float)data[i].tot/3;
for(i=0; i9; i++) //버블정렬, 평균을 비교함
for(j=i+1; j10; j++){
if(data[i].avgdata[j].avg){
temp=data[i].avg;
data[i].avg=data[j].avg;
data[j].avg=temp;
}
for(i=0; i=9; i++)//성적순으로 출력
printf(%s, %f\n, data[i].name,data[i].avg);}
}
-
바나나
구조체 전부를 바꿔줘야 한다는 댓글을 보고 힌트를 얻어 프로그램을 수정했습니다. 허나 아직도 제가 원하는 결과가 출력되지 않아 수정된 프로그램으로 다시 질문 올렸습니다. 두 분 댓글 감사합니다^^
-
지음
if(data[i].avgdata[j].avg){
temp=data[i].avg;
data[i].avg=data[j].avg;
data[j].avg=temp;
}
여기에서 평균값만 바꾸는 것이 아니고 구조체 멤버를 전부 바꿔줘야 됩니다. -
민혁
이건 좀 다른 이야기지만 sort함수 내에서 총점과 평균을 구하는건 좀 아닌듯..
그리고 버블정렬시 비교는 평균으로 하고
값교환은 data의 속성값을 한번에 모두 바꿔야 될듯
students temp;
temp=data[i];
..
..
이런식으로? 될려나? 해보진 않았음;;