I. 입력과 출력이란?
구분 | 뜻 | 장치 |
입력 input |
프로그램이 스트림을 통해 입력장치로 부터 데이터를 받는 것 | 입력장치의 예 키보드, 마우스, 파일, 소켓 등 |
출력 output |
프로그램이 스트림을 통해 출력장치에게 데이터를 보내는 것 | 출력장치의 예 모니터, 프린터, 파일, 소켓 등 |
II. 스트림
1. 스트림이란?
프로그램과 입·출력 장치는 연결되어 있지 않고 완전히 동떨어져 있는 두개의 서로 다른 개체이다. 이 둘을 연결해주는 다리의 역할을 하는 것을 스트림(stream) 이라고 한다. 스트림은 운영체제가 만든다.
참고로, stream 의 사전적 의미는 명사로는 「개울, 시내」이고 동사로는 「계속 흐르다, 줄을 지어 이동하다」 가 있다.
2. 표준 스트림 standard stream
프로그램 실행 시 자동으로 생성되고 프로그램 종료 시 자동으로 소멸된다.
이름 | 스트림의 종류 | 입·출력 장치 |
stdin | 표준 입력 스트림 | 키보드 |
stdout | 표준 출력 스트림 | 모니터 |
stderr | 표준 에러 스트림 | 모니터 |
III. 문자 단위 입·출력
1. 출력
1) syntax
#include <stdio.h>
int putchar(int c);
int fputc(int c, FILE* stream);
(1) putchar(): 전달된 문자를 stdout 으로 출력한다.
(2) fpuc(): 전달된 문자를 지정한 스트림으로 출력한다.
2) return
성공시 출력된 문자, 오류 발 생시 EOF를 리턴한다.
3) parameters
(1) int c: 출력할 문자
(2) FILE* stream: 출력할 스트림
2. 입력
1) syntax
#include <stdio.h>
int getchar(void);
int fgetc(FILE* stream);
(1) getchar(): stdin 으로부터 한 문자를 입력받아서 반환한다.
(2) fgetc(): 지정한 스트림으로부터 한 문자를 입력받아서 반환한다.
2) return
성공시 입력된 문자를, 에러가 발생하거나 파일의 끝에 도달하는 경우 EOF 리턴
3) parameters
FILE* stream: 입력받을 스트림
IV. 문자열 단위 입·출력
1. 출력
1) syntax
#include <stdio.h>
int puts(const char* s);
int fputs(const char* s, FILE* stream);
(1) puts(): 전달된 문자열에 '\n'을 추가하여 stdout 으로 출력한다.
(2) fputs(): 전달된 문자열을 지정된 스트림으로 출력한다.
2) return
성공시 음수가 아닌 값을, 에러가 발생 하는 경우 EOF 리턴한다.
3) parameters
(1) const char* s: 출력할 문자열
(2) FILE* stream: 출력할 스트림
2. 입력
1) syntax
#include <stdio.h>
char* gets(char* s);
char* fgets(char* s, int n, FILE* stream);
(1) gets(): stdin으로부터 문자열을 입력받아서 전달된 배열에 저장한다. 버퍼 오버 플로우의 위험이 있어, C99 표준 부터 제거됨.
(2) fgets(): 지정된 스트림으로부터 지정된 길이 만큼 문자열을 입력받아서 전달된 배열에 저장한다.
2) return
성공시 입력받은 문자역, 에러가 발생하거나 파일의 끝에 도달하는 경우 NULL 포인터 리턴한다.
3) parameters
(1) char* s: 문자열을 저장할 배열이름
(2) int n: 저장할 길이
(3) FILE* stream: 입력받을 스트림
V. 형식 지정 입·출력
1. 출력
1) syntax
#include <stdio.h>
int printf(const char *format-string, argument-list);
int fprintf(FILE* stream, const char *format-string, argument-list);
(1) printf(): 지정한 서식에 따라 전달된 값을 stdout에 출력한다.
(2) fprintf(): 지정한 서식에 따라 전달된 값을 지정한 스트림에 출력한다.
2) return
성공시 출력된 바이트 개수를, 실패시 음수를 반환한다.
3) parameters
(1) const char *format-string: 서식문자
(2) argument-list: 출력할 값
(3) FILE* sream: 출력할 스트림
2. 입력
1) syntax
#include <stdio.h>
int scanf(const char *format-string, argument-list);
int fscanf(FILE* stream, const char *format-string, argument-list);
(1) scanf(): stdin 으로부터 지정된 서식에 따라 전달된 위치로 입력을 받는다.
(2) fscanf(): 지정된 스트림으로부터 지정된 서식에 따라 전달된 위치로 입력을 받는다.
2) return
성공시 서식문자의 개수, 실패나 파일의 끝에 도달하면 EOF를 반환한다.
3) parameters
(1) const char *format-string: 서식문자
(2) argument-list: 입력된 값이 저장될 위치
(3) FILE* stream: 입력받을 스트림
VI. 파일의 끝
함수 | 파일의 끝에서 리턴 되는 값 |
fgetc | EOF(1) |
fgets | NULL |
fscanf | EOF(1) |
VII. EOF
#include <stdio.h>
int feof(FILE *stream)
파일의 끝에 도달한 경우 0이 아닌 값을 리턴한다.
VIII. fseek
#include <stdio.h>
int fseek(파일포인터, 이동량, 시작위치)
성공시 0을, 실패 시 0이 아닌 값을 리턴한다.
파일 위치 지시자를 시작위치로 부터 이동량 만큼 보낼 수 있다. 이동량이 양수이면 뒤로, 음수이면 앞으로 이동한다.
시작위치가 | 이동하기 전에 |
SEEK_SET(0) 이면 | 파일의 맨 앞으로 이동한다. |
SEEK_CUR(1) 이면 | 이동하지 않는다.(현재 위치) |
SEEK_END(2) 이면 | 파일의 끝으로 이동한다. |
'컴퓨터 > C' 카테고리의 다른 글
C 중첩된 구조체 (0) | 2022.10.30 |
---|---|
C 문자열 조작 함수 (0) | 2022.10.25 |
C 문자 배열과 문자열 (0) | 2022.10.24 |
C 표준 라이브러리 (0) | 2022.10.23 |
C 10진수를 2진수로 출력 (2) | 2022.10.15 |