본문 바로가기

컴퓨터/C

C 입력, 출력

I. 입력과 출력이란?

구분 장치
입력
input
프로그램이 스트림을 통해 입력장치로 부터 데이터를 받는 것 입력장치의 예
키보드, 마우스, 파일, 소켓 등
출력
output
프로그램이 스트림을 통해 출력장치에게 데이터를 보내는 것 출력장치의 예
모니터, 프린터, 파일, 소켓 등

II. 스트림

1. 스트림이란?

  프로그램과 입·출력 장치는 연결되어 있지 않고 완전히 동떨어져 있는 두개의 서로 다른 개체이다. 이 둘을 연결해주는 다리의 역할을 하는 것을 스트림(stream) 이라고 한다. 스트림은 운영체제가 만든다.

출처: 열혈강의 C 프로그래밍

  참고로, 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