C언어 바이너리파일생성

2018. 12. 18. 17:08개발노트


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
typedef struct
{
    char name[10];
    int kor, eng, mat;
    int avg;
    int rank;
 
}Student;
cs


구조체먼저 만들어줍니다.

학생의 이름과 국어, 영어, 수학  점수를 입력받고

바이너리 파일에는 평균과 rank를 추가시켜서 입력 할 예정이기 때문에

구조체에 6개 변수를 담아줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int main(void) {
 
    Student s1;
    FILE *fp, *fout;
    fp = fopen("student.txt""w");  //"r"읽기 "a"추가로쓰기 "w"덮어쓰기
    fout = fopen("student.bin""wb");
    if (fp == NULL) {
        printf("파일 개방 오류 \n");
        return 1;
    }
    for (int i = 0; i < 2; i++) {
        printf("학생의 이름과 국어, 영어, 수학점수를 입력하세요. \n");
        scanf("%s %d %d %d", s1.name, &s1.kor, &s1.eng, &s1.mat);
 
        s1.avg = (s1.kor + s1.eng + s1.mat) / 3;
        s1.rank =0;
 
        fprintf(fp, "%s %d %d %d %d \n", s1.name, s1.kor, s1.eng, s1.mat, s1.avg, s1.rank);
        fwrite(&s1, sizeof(s1), 1, fout);
 
    }
    //fwrite(&s1, sizeof(s1), 1, fout);
    fclose(fp);
    fclose(fout);
    return 0;
}
cs


구조체를 s1 변수로 불러오고

파일을 미리 생성해줍니다.


for문으로 2명의 학생정보를 입력받습니다.

scanf 로 사용자가  직접 입력합니다.

입력 후 평균값을 계산해서 s1.avg에 넣습니다. s1.rank는 생략했습니다.


fprintf를 사용해서 구조체 변수의 값을 fp 파일에 넣습니다.


바이너리 파일로의  파일 내용 복사는

fwrite를 사용합니다. 


fwrite의 인자는 

fwrite(ptr, size, count, stram)


ptr스트림에 쓰여질 배열을 가리키는 포인터.

size그 배열의 각각의 원소의 크기

count그 배열의 원소의 수 이다. 이 때, 각 원소의 크기는 size 바이트 이다.

stream내용을 쓸 스트림을 가리키는 FILE 포인터