Develop

[c] 구조체 배열 예제 (학생 성적 계산)

by hooni posted Apr 23, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
구조체 배열에 학생 성적 입력 받아서..
총점,평균 계산해서 파일 출력하는 간단한.. ㅋㄷ
상언아~ 좋지? ㅋㄷ

입력 받고 출력하는 주요 함수

/* 점수 받아옴 (도중에 exit 나 그냥 엔터 치면 종료) */
void get_marks(){
    int i;
    char tmp[LEN]={0,};

    for(i=0; i<ARR; i++){
        printf("\n## %d 번째 학생 ##\n", i+1);
        printf("학    번 : ");
        fgets(tmp, LEN, stdin);
        if(isexit(tmp)) return;
        strcpy(std[i].hak, tmp);

        printf("이    름 : ");
        fgets(tmp, LEN, stdin);
        if(isexit(tmp)) return;
        strcpy(std[i].name, tmp);

        printf("리 눅 스 : ");
        fgets(tmp, LEN, stdin);
        if(isexit(tmp)) return;
        std[i].lin=atol(tmp);

        printf("프로그램 : ");
        fgets(tmp, LEN, stdin);
        if(isexit(tmp)) return;
        std[i].pro=atol(tmp);

        std[i].total=std[i].lin + std[i].pro;
        std[i].avg=(std[i].lin + std[i].pro) / 2;

        /* 출력할 때 몇 개 출력할건지 루프 돌아야 하는 카운트 */
        num++;
    }
}

/* 파일로 출력하는 함수 */
void print_marks(){
    FILE *fp;
    int i;

    /* 파일 열기 */
    if((fp=fopen("data.dat","w"))==NULL){
        printf("\nfile open error!\n\n");
        return;
    }

    fprintf(fp, "## 결과 ## \n");
    fprintf(fp, "%s\t %8s\t% 4s\t %4s\t %4s\t %4s\n","학번","성명","리눅스", "프로그램", "총점", "평균");
    for(i=0; i<num; i++){
        fprintf(fp, "%s\t %8s\t %5.0f\t %8.0f\t %4.0f\t %4.2f\n",
            std[i].hak, std[i].name, std[i].lin, std[i].pro, std[i].total, std[i].avg
            );
    }
    fclose(fp);

    printf("\n결과가 data.dat 파일로 출력되었습니다\n\n");
}