..

Search

35) 기본적인 입출력

35) 기본적인 입출력

기본적인 입출력


기본적인 입출력

C언어에서는 기억장치에 저장되는 파일을 다루는 것과 마찬가지 방식으로 입출력 장치를 다룹니다.

따라서 키보드, 모니터와 같은 대부분의 콘솔 장치도 C 프로그램에서는 자동으로 열리는 파일처럼 다뤄집니다.

C언어에서는 stdin 표준 스트림을 통해 입력 장치를 다루며, stdout 표준 스트림을 통해 출력 장치를 다루게 됩니다.


스트림(stream)

C 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)이라는 것을 통해 다룹니다.

스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미합니다.

즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미합니다.

 

스트림

 

C언어에서 파일과의 연결을 위한 스트림은 사용자가 직접 생성하고 소멸시켜야 합니다.

하지만 콘솔 장치에 대한 스트림은 프로그램 실행 시 자동으로 생성되며, 프로그램 종료 시 자동으로 소멸합니다.

 

입출력 스트림

 

C언어에서 기본적으로 제공되는 표준 스트림(standard stream)은 다음과 같습니다.

표준 스트림 설명
stdin 표준 입력 스트림
stdout 표준 출력 스트림
stderr 표준 오류 스트림

EOF(End Of File)

운영체제에서 파일의 끝을 탐지하는 방법은 운영체제마다 약간씩 다릅니다.

하지만 C언어는 운영체제와 상관없이, 파일의 끝에 도달했을 때 언제나 특별한 값을 반환하도록 합니다.

그 값을 EOF(End Of File)라고 하며, 실제로 이 값은 -1을 나타냅니다.

 

파일뿐만 아니라 키보드를 통한 입력 시에도 입력의 끝을 알려주는 방법이 필요합니다.

대부분의 유닉스(UNIX) 시스템에서는 라인의 시작 위치에서 Ctrl+D를 누르면 EOF를 발생시킬 수 있습니다.

윈도우 명령창에서는 해당 라인의 어디에서든 Ctrl+Z를 누르고 나서 Enter를 누르면 EOF를 발생시킬 수 있습니다.

 

다음 예제는 사용자가 EOF를 입력할 때까지 계속해서 영문자를 한 문자씩 입력받는 예제입니다.

예제

#include <stdio.h>

int main(void)

{

    char ch;

    printf("EOF가 입력될 때까지 영문자를 계속 입력받습니다 :\n");

    printf("(윈도우에서 EOF의 강제 발생은 Ctrl+Z를 누르고 나서 Enter를 누르면 됩니다)\n");

 

    while ((ch = getchar()) != EOF)

    {

        putchar(ch);

    }

    return 0;

}

실행 결과

EOF가 입력될 때까지 영문자를 계속 입력받습니다 : 

(윈도우에서 EOF의 강제 발생은 Ctrl+Z를 누르고 나서 Enter를 누르면 됩니다)

a

a

b

b

-1

-1

^Z


연습문제