본문 바로가기
공학/C

표준 입출력과 파일 입출력

by 둥둥잇 2014. 11. 19.


스트림 : 모든 입력과 출력을 바이트들의 흐름으로 생각하는 것


* 입출력 함수의 분류

- 형식이 없는 입출력

getchar() 문자 입력 함수

putchar() 문자 출력 함수

gets() 문자열 입력 함수

puts() 문자열 출력 함수


- 형식이 있는 입출력

printf() 형식화된 출력 함수

scanf() 형식화된 입력 함수



* 출력값의 형식 지정자

%d 부호 있는 10진수

%i 부호 있는 10진수

%u 부호 없는 10진수

%o 부호 없는 8진수

%x 부호 없는 16진수, 소문자

%X 부호 없는 16진수, 대문자

%f 소수점 고정 표기 형식

%e 지수 표기 형식, 지수 부분을 e로

%E 지수 표기 형식, 지수 부분을 E로

%g %e 형식과 %f 형식 중 더 짧은 형식으로 출력

%G %E 형식과 %f 형식 중 더 짧은 형식으로 출력

%p 포인터 형식


* 필드폭 지정 형식 지정자

%6d  폭은 6이며 우측정렬

%-6d  폭은 6이며 좌측정렬

%+6d  폭은 6이며 우측정렬, 부호를 함께  ex. +123


* 정밀도 형식 지정자

%6.2f   전체폭은 6, 소수점 이하 자리 2, 우측정렬  ex. 1.23




* 필드폭 지정해서 읽기

scanf("%3d%d:, &a, &b);        // 세글자씩 나누어서 읽음

123456을 입력하면 123 / 456 으로 들어감



* 문자열 읽기

%c char형으로 입력받음

%s 공백 문자가 아닌 문자로부터 공백 문자가 나올 때까지 문자열로 변환하여 입력받음

%[abc] 대괄호 안에 있는 문자 a,b,c로만 이루어진 문자열을 읽어들임

%[^abc] 대괄호 안에 있는 문자 a,b,c 만을 제외하고 다른 문자들로 이루어진 문자열을 읽어들임







* 파일

- 파일도 스트림으로 취급되기 때문에 일련의 연속된 바이트라고 취급


* 파일의 유형

- 텍스트 파일 : 문자들이 들어있고, 이들 문자들은 아스키 코드를 이용하여 표현

- 이진 파일 : 사람이 읽을 수 없으나 컴퓨터가 읽을 수 있는 파일 / 특정 프로그램에 의해서만 판독 가능



* 파일 열기

FILE *fp;

fp = fopen("test.txt", "w");        //test.txt라는 파일을 쓰기 모드로 생성


* 파일 모드

r 읽기 모드

w 쓰기 모드

a 추가 모드

r+ 읽기와 쓰기 모드 / 반드시 파일 존재

w+ 읽기와 쓰기 모드 / 파일이 존재하지 않으면 생성

a+ 읽기와 추가 모드

b 이진 파일 모드



* 파일 닫기

FILE *fp;

fp = fopen("test.txt", "w");

fclose(fp);




* 텍스트 파일 읽기와 쓰기

문자 단위            int fgetc(FILE *fp)                                            int fputc(int c, FILE *fp)

문자열 단위         char *fgets(char *buf, int n, FILE *fp)                int fputs(const char *buf, FILE *fp)

서식화된 입출력   int fscanf(FILE *fp, ...)                                     int fprintf(FILE *fp, ...)

이진 데이터         fread(char *buffer, int size, int count, FILE *fp)   fwrite(char *buffer, int size, int count, FILE *fp);




* 순차 접근

 데이터를 파일의 처음부터 순차적으로 읽거나 기록하는 것

 한번 읽은 데이터를 다시 읽으려면 현재의 파일을 닫은 후에 파일을 다시 열어야 함

 또한 앞부분을 읽지 않고 중간이나 마지막으로 건너뛸 수도 없다

* 임의 접근

 파일의 어느 위치에서든지 읽기와 쓰기가 가능



- 파일 위치 표시자 관련 함수

int fseek(FILE *fp, long offset, int origin);

fp는 FILE에 대한 포인터 / offset은 기준 위치로부터 위치 표시자가 이동하는 거리 / origin 기준 위치


fseek(fp, 0L, SEEK)SET);        // 파일의 처음으로 이동





+ 텍스트 파일과 이진 파일 입출력의 차이

텍스트 파일을 입출력 하는 경우 변환 발생 : 줄의 끝을 나타내는 \n을 시스템에 맞춰 \r\n으로 변환

이진 파일 입출력의 경우에는 어떠한 변환도 없이 입출력



+ EOF : End Of File

파일의 끝을 나타내는 표시

EOF는 시스템에 따라 달라지지만 보통 int형의 -1이 사용



+ 키보드에서 EOF 입력하기

윈도우 : Ctrl + Z



+ 파일을 오픈한 후 닫지 않으면?

일반적으로 프로그램이 종료되면 파일들은 모두 자동적으로 닫혀짐

하지만 하나의 프로그램에서 열 수 있는 파일의 개수는 보통 제한되어 있으므로

파일을 열기만 하고 닫지 않으면 문제가 될 수 있음


'공부 > C' 카테고리의 다른 글

Visual Stuio로 코딩하다가...  (0) 2014.11.25
동적 메모리  (0) 2014.11.19
문자와 문자열  (0) 2014.11.18
전처리기  (0) 2014.11.18
공용체  (0) 2014.11.18

댓글