data,txt 에


1111      100       50      90

1112       90       86     54

1113       89       76      20

1114       30       10     97

1115       70      100     74


이렇게 저장을 한후


파일 제일 끝에 최고 평균점수(국/영/수) ,받은 학생의 학생번호와 국/영/수 점수 및 평균 출력하는건데


#include <stdio.h>


#define MAX_STUDENTS 100


/* 학생구조체 선언 */

typedef struct

{

int id;

int kor, eng, math, total;


// 총점

float average;


// 학점

char grade;


// 등수

int rank;

}student;


/* 평균 avrg로부터 학점을 리턴하는 함수 */

char get_grade(float avrg)

{

if (avrg >= 90)

return 'A';


if (avrg >= 80)

return 'B';


if (avrg >= 70)

return 'C';


if (avrg >= 60)

return 'D';


return 'E';

}


int main(void)

{

/* 100 명정도의 학생정보를 읽는다고 가정 */

student stds[MAX_STUDENTS];

FILE* fin, *fout;


/* 라인문자열을 읽어들일 버퍼 */

char line[255];


/* nread : 읽어들인 레코드의 수 */

int i = 0, j, nread;


/* 과목별 총점, 평균 */

int tot_kor = 0, tot_eng = 0, tot_math = 0;

float avrg_kor, avrg_eng, avrg_math;


/* 입력화일 개방하기 */

fin = fopen("data1.txt", "rt");

if (fin == NULL)

{

fprintf(stderr, "지정하신 입력파일을 개방할 수 없습니다.\n");

return 1;

}


/* 첫 라인은 제목줄이므로 읽어낸다 */

fgets(line, 255, fin);


/* 정확하게 저장된 구조체에 속한 필드수 4개를 읽어낸다 */

while (fscanf(fin, "%d%d%d%d%d", stds[i].id, &stds[i].kor, &stds[i].eng, &stds[i].math) == 4)

{

stds[i].total = stds[i].kor + stds[i].eng + stds[i].math;

stds[i].average = stds[i].total / 3.0;

stds[i].grade = get_grade(stds[i].average);


/* 등수를 우선은 모두 1로 설정 */

stds[i].rank = 1;


/* 과목별 총점을 계산 */

tot_kor += stds[i].kor;

tot_eng += stds[i].eng;

tot_math += stds[i].math;


// 다음라인 읽기

i++;

}


/* 읽은 레코드수를 저장 */

nread = i;


/* 등수 구하기 -

정렬하지 아니하고 점수를 비교하여

등수를 결정합니다. */


for (i = 0; i < nread; i++)

{

for (j = 0; j < nread; j++)

{

if (stds[i].average < stds[j].average)

stds[i].rank++;

}

}


/* 과목별 평균 */

avrg_kor = ((float)tot_kor) / nread;

avrg_eng = ((float)tot_eng) / nread;

avrg_math = ((float)tot_math) / nread;



/* 화면에 출력해보기 */

fout = fopen("output.txt", "wt");

if (fout == NULL)

{

fprintf(stderr, "지정하신 출력화일을 개방할 수 없습니다.\n");

return 1;

}


fprintf(stdout, " 성적표 \n");

fprintf(stdout, "------------------------------------------------------\n");

fprintf(stdout, "번호 성명 국어 영어 수학 총점 평균 학점 등수\n");


for (i = 0; i < nread; i++)

{

fprintf(stdout, "M M M M M M %5.1f L M\n", i + 1, stds[i].id, stds[i].kor, stds[i].eng, stds[i].math, stds[i].total, stds[i].average, stds[i].grade, stds[i].rank);

fprintf(stdout, "------------------------------------------------------\n");

}


/*과목별 총점과 평균 출력 */

fprintf(stdout, "\n각 과목별 합계와 평균점수입니다\n");

fprintf(stdout, "\n[국어]\n");

fprintf(stdout, "합계 : %d\t평균 : %.1f\n", tot_kor, avrg_kor);


fprintf(stdout, "\n[영어]\n");

fprintf(stdout, "합계 : %d\t평균 : %.1f\n", tot_eng, avrg_eng);


fprintf(stdout, "\n[수학]\n");

fprintf(stdout, "합계 : %d\t평균 : %.1f\n", tot_math, avrg_math);




/* 화일에 출력하기 */

fprintf(fout, " 성적표 \n");

fprintf(fout, "------------------------------------------------------\n");

fprintf(fout, "번호 성명 국어 영어 수학 총점 평균 학점 등수\n");


for (i = 0; i < nread; i++)

{

fprintf(fout, "M M M M M M %5.1f L M\n", i + 1, stds[i].id, stds[i].kor, stds[i].eng, stds[i].math, stds[i].total, stds[i].average, stds[i].grade, stds[i].rank);

fprintf(fout, "------------------------------------------------------\n");

}


/*과목별 총점과 평균 출력 */

fprintf(fout, "\n각 과목별 합계와 평균점수입니다\n");

fprintf(fout, "\n[국어]\n");

fprintf(fout, "합계 : %d\t평균 : %.1f\n", tot_kor, avrg_kor);


fprintf(fout, "\n[영어]\n");

fprintf(fout, "합계 : %d\t평균 : %.1f\n", tot_eng, avrg_eng);


fprintf(fout, "\n[수학]\n");

fprintf(fout, "합계 : %d\t평균 : %.1f\n", tot_math, avrg_math);


/* 화일닫기 */

fclose(fin);

fclose(fout);


return 0;

}

이렇게 코드 짜고 작동해봤는데... 작동이 중지되네요... 뭐가 문제인거죠?