본문 바로가기

Programming/C/C++

C/고수준 파일 입출력/형식 기반 입출력 함수

반응형
형식 기반 입출력
 - 형식 기반 입력 함수 : scanf(3) -> 저수준, fscanf(3) -> 고수준

  • fscanf도 scanf가 사용하는 형식 지정 방법을 그대로 사용
  • 성공하면 읽어온 항목의 개수 리턴
 - 형식 기반 출력 함수 : printf(3) -> 저수준 , fprintf(3) -> 고수준
  • fprintf는 지정한 파일로 형식 지정 방법을 사용하여 출력
형식 기반 입출력 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *rfp;
    int id, s1, s2, s3, s4, n;
    if ((rfp = fopen("unix.dat""r")) == NULL) {
        perror("fopen: unix.dat");
        exit(1);
    }
 
    printf("grade, average\n");
    while ((n = fscanf(rfp, "%d %d %d %d %d"&id, &s1, &s2, &s3, &s4)) != EOF) {
        printf("%d : %d\n", id, (s1 + s2 + s3 + s4) / 4);
    }
 
    fclose(rfp);
 
    return 0;
}
cs

형식 기반 입출력 응용 - fprintf()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *rfp, *wfp;
    int id, s1, s2, s3, s4, n;
    if ((rfp = fopen("unix.dat""r")) == NULL) {
        perror("fopen: unix.dat");
        exit(1);
    }
    if ((wfp = fopen("unix.scr""w")) == NULL) {
        perror("fopen: unix.scr");
        exit(1);
    }
 
    fprintf(wfp, "grade, average\n");
    while ((n = fscanf(rfp, "%d %d %d %d %d"&id, &s1, &s2, &s3, &s4)) != EOF) {
        fprintf(wfp, "%d : %d\n", id, (s1 + s2 + s3 + s4) / 4);
    }
    fclose(rfp);
    fclose(wfp);
    return 0;
}
cs


반응형