본문 바로가기
c언어

c언어 문자 입출력 라이브러리에 대하여 알아보기

by 개발자 L 2022. 12. 22.
반응형

c언어 문자 입출력 라이브러리에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 문자 입출력 라이브러리에 대하여 알아보는 시간을 갖도록 하겠습니다.

문자와 문자열은 프로그래밍에서 정말 많이 사용되는 만큼, 문자와 문자열을 처리하는 것은

라이브러리 함수로 지원이 됩니다.

그럼 이러한 라이브러리가 어떤 것이 있는지 자세히 알아보도록 하겠습니다.

그럼 지금부터 같이 보시죠.

 

1. 문자 입출력 함수

우리가 지금까지 문자와 문자열을 입출력 할 때 scanf()와 printf() 함수를 써서 얼마든지 출력을 할 수 있었습니다.

하지만 언제든지 예외 사항은 존재하는 법이죠.

그래서 그럴 때 쓰는 입출력 라이브러리 함수를 한 번 표로 정리를 해봤습니다.

입출력 함수 설명
int getchar() 하나의 문자를 읽어서 반환
int putchar(int c) 변수 c에 지정된 문자 출력
int _getch() 하나의 문자를 읽어서 반환(버처 사용 x)
void _putch(int c) 변수 c에 지정된 문자 출력(버퍼 사용 x)
scanf("%c", &c) 하나의 문자를 읽어서 변수 c에 저장
printf("%c", c) 변수 c에 저장된 문자 출력

대략 이러한 것들이 있습니다.

 

1 - 1. getchar(), putchar()

제일 먼저 getchar()과 putchar()에 대하여 알아보겠습니다.

이들의 쓰임새는 이러합니다.

int ch;

ch = getchar(); // 하나의 문자 읽음
putchar(ch); // 하나의 문자 반환

이렇습니다.

getchar()로 문자를 읽고, putchar()로 문자를 반환하는 형태를 가지고 있습니다.

그럼 이를 어떻게 사용을 하는 지 간단한 코드를 통해 알아보도록 하겠습니다.

#include <stdio.h>

int main()

{
    int ch;

    while((ch = getchar()) != EOF)
    {
        putchar(ch);
    }

    return 0;
}

기능적인 부분들만 보려고 최대한 간단히 작성을 해봤습니다.

그럼 어떤 결과가 나오는지 한 번 보도록 하겠습니다.

a
a
c
c
^Z

C:\c, c++ folder>

이런 식으로 나옵니다.

그런데 여기서 조금 이상하게 느껴지는 것이 있었을 겁니다.

일단 자료형이 정수형이라는 점이 눈에 띌 것이고,

실행했을 때 당연히 문자를 읽어야 하니 문자를 입력해야 하는 건 당연한 건데,

그냥 단순히 입력만 했다고 해서 출력이 되지는 않았습니다.

그래서 엔터키를 눌러서 입력을 끝냈을 겁니다.

그랬을 때 입력했던 문자가 반환이 되는 것을 보았을 겁니다.

이렇게 엔터키를 입력해서 입출력에 상호작용을 일으키는 것을 보고

'버퍼를 사용한다.'라고 합니다.

그리고 여기서 새로운 용어를 알게 되었을 텐데,

EOF(End Of File)은 파일의 끝, 다시 말하면 실행 파일 종료를 하는 것을 말합니다.

예를 들어서 코드를 잘못 입력해서 무한 루프에 빠졌다던지,

아니면 사용자가 강제로 종료하지 않으면 계속 돌아가는 코드라면,

직접 강제 종료를 시켜줘야 합니다.

거의 대다수의 프로그래밍 언어의 EOF 및 인터프리터 종료 단축키가 ctrl + z입니다.

그래서 잘 기억해두면 예상치 못한 상황에서 벗어날 수 있을 겁니다.

그리고 이러한 기능이 구현될 수 있는 이유는 , EOF는 보통 -1로 통용되기 때문에,

그게 곧 종료 함수와 직결이 됩니다.

반응형

 

1 - 2. _getch(), putch()

이 두 함수는 앞서 다뤘던 getchar(), putchar() 함수와 기능은 동일하지만,

버퍼를 사용하지 않습니다.

다시 말하면 에코가 없습니다.

그래서 에코가 없기 때문에 화면상에 입출력 시에 나타나는 것이 없습니다.

하지만 상황에 따라서 에코가 필요한 상황도 오는데,

그럴 경우에는 _getche() 함수를 이용하면 됩니다.

그리고 제가 getchar(), _getch(), getche() 함수의 특징을 표로 정리를 해봤습니다.

  헤더파일 버퍼 사용 여부 에코 여부 응답성 문자 수정 여부
getchar() <stdio.h> o o 줄 단위 응답 o
_getch() <conio.h> x x 문자 단위 응답 x
_getche() <conio.h> x o 문자 단위 응답 x

이렇습니다.

그러면 이들을 어떤 식으로 사용을 하는지 한 번 간단하게 코드를 작성을 해보도록 하겠습니다.

#include <stdio.h>
#include <conio.h>

int main()

{
    int ch;

    while((ch = _getch()) != 'q')
    {
        _putch(ch);
    }

    return 0;
}

이렇게 작성해서 q를 누르면 루프를 빠져나올 수 있는 코드를 작성을 했습니다.

그럼 결과를 한 번 보도록 하겠습니다.

abcdefgh
C:\c, c++ folder>

이렇게 에코가 없이 그냥 치는 족족 다 입력이 되고 있으며,

q를 눌렀을 때 프로그램이 종료가 됩니다.

 

1 - 3. scanf(), printf()

이 둘은 우리가 지금까지 굉장히 많이 다뤘습니다.

문자는 똑같이 char형으로 받아서 scanf()로 주소값을 받아주고,

그다음에 printf()로 출력을 해주는 방법을 썼었습니다.

이런 식으로 말이죠.

char ch;

scanf("%c", &ch);

printf("%c", ch);

이 방법 다들 아시리라 생각하고,

이 부분은 넘어가도록 하겠습니다.

 

지금까지 문자 입출력 라이브러리에 대하여 알아보았습니다.

다음 포스팅에서는 문자열 입출력 라이브러리에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글