구조체선언하고 동적할당주고난담에 성적을 비교해서 성적순으로 출력하고싶은데 만약 20개중 5개만 할당되었다면
포문의 조건문을 어떻게 줘야 하죠..??
typedef struct
{
int student_num;
char name[10];
int kor;
int eng;
int math;
int total;
int rank;
} STU;
STU *stu
stu = (STU*)malloc(sizeof(STU) * 20);
void display_rank(void)
{
int i, j;
FILE *fp1, *fp2; //파일형 변수 선언
while(1)
{
fp1=fopen(\"input.txt\",\"r\"); //파일을 읽기전용으로 연다
if(fp1==NULL)
{
printf(\"해당 파일이 없습니다.\\n\");
return 1;
}
else
break;
}
for(i=0; i<20; i++) //i는 0부터 10보다 작은동안 1씩 증가하며 반복
fscanf(fp1,\"%d %s %f %f %f\", &stu[i].student_num, stu[i].name, &stu[i].kor, &stu[i].eng, &stu[i].math);
fclose(fp1); //파일을 각각의 변수에 저장 하고 파일을 닫는다
for(i=0; i<a; i++)
stu[i].total = stu[i].kor + stu[i].eng + stu[i].math; //각 과목의 총합을 더하여 total에 저장
for(i=0; i<a; i++)
{
stu[i].rank=1; //rank에 초기값 1을 저장
for(j=0; j<a; j++)
{
if(stu[i].total < stu[j].total) //총점으로 등수비교하는거
stu[i].rank++; //s[i].rank +1을 한다
}
}
fp2=fopen(\"rank.txt\",\"w\"); //파일을 쓰기전용으로 연다
printf(\"┌───────────【 순위별성적표 】───────────┐\\n\");
fprintf(fp2,\"┌───────────【 순위별성적표 】───────────┐\\n\");
printf(\"│ 이 름 국어 영어 수학 합계 등수 │\\n\");
fprintf(fp2,\"│ 이 름 국어 영어 수학 합계 등수 │\\n\");
//성적표 항목 을 콘솔및 파일에 출력
for(i=1; i<=a; i++) //i는 1부터 10보다 작거나 같은동안 1씩 증가하며 반복
{
for(j=0; j<a; j++) //j는 0부터 10보다 작은동안 1씩 증가하며 반복
{
if(stu[j].rank==i) //각각의 등수가 i과 같으면 (즉, 1등부터 차례로 출력)
{
printf(\"├───────────────────────────────┤\\n\");
fprintf(fp2,\"├───────────────────────────────┤\\n\");
printf(\"│%d%10s%10.1f%10.1f%10.1f%10.1f%10d │\\n\", stu[j].student_num,stu[j].name, stu[j].kor, stu[j].eng, stu[j].math, stu[j].total, stu[j].rank);
fprintf(fp2, \"│%d%10s%10.1f%10.1f%10.1f%10.1f%10d │\\n\", stu[j].student_num,stu[j].name, stu[j].kor, stu[j].eng, stu[j].math, stu[j].total, stu[j].rank);
} //해당 사람의 성적을 콘솔및 파일에 출력
}
}
printf(\"└───────────────────────────────┘\\n\");
fprintf(fp2,\"└───────────────────────────────┘\\n\");
fclose(fp2); //하단 라인을 출력하고 줄내림
}
static 로 맨처음 구조체에 박아넣고 늘어나거나 줄어들때 증감시키기