본문 바로가기
컴퓨터 공학/C, C++

[ C ] 문자열 함수 이해하기3_문자 단위 입출력 함수_putchar, fputc, getchar, fgetc / EOF 이란

by hahehohoo 2020. 7. 21.
반응형

 

 

C언어 문법 문자 단위 입출력 함수_putchar, fputc, getchar, fgetc, EOF

 

 

■ 문자 출력 함수: putchar, fputc

모니터로 하나의 문자를 출력할 때 일반적으로 다음 두 함수를 사용합니다. 

 

#include <stdio.h>
int putchar(int c);
int fputc(int c, FILE * stream); 
/* 함수 호출 실패 시 EOF 반환 */

 

putchar 함수는 인자로 전달된 문자를 stdout으로 표현되는 표준 출력 스트림으로 전송하는 함수입니다. 

fputc 역시 같은 역할이며, 두번째 인자로 스트림을 지정할 수 있다는 차이가 있습니다. 

 

 

■ 문자 입력 함수: getchar, fgetc

키보드로 하나의 문자를 입력할 때 일반적으로 다음 두 함수를 사용합니다. 

 

#include <stdio.h>
int getchar(void);
int fgetc(FILE * stream); 
/* 함수 호출 실패 시 EOF 반환 */

 

getchar 함수는 stdin으로 표현되는 표준 출력 스트림으로부터 하나의 문자를 입력 받아서 반환하는 함수입니다.

fgetc역시 같은 역할이며, 두번째 인자로 스트림을 지정할 수 있다는 차이가 있습니다. 

 

 

위에서 다룬 함수 4개를 다 사용한 예제 코드를 보겠습니다.

#include <stdio.h>

int main(void)
{
	int ch1, ch2;
    ch1=getchar(); // 문자 입력
    ch2=fgetc(stdin); // 엔터 키 입력
    
    putchar(ch1);  // 문자 출력
    fputc(ch2, stdout);  // 엔터 키 출력
    return 0;
}

코드를 실행하면 

p

p

 

이런 결과가 나옵니다. 소스 코드상으로는 분명 두 개의 문자를 입출력하고 있습니다 하지만 실행 결과에서는 하나의 문자만 출력된 것으로 보이죠. 실제로는 두 개의 문자가 출력된 것이 맞습니다. 다만 두 번째 문자가 '엔터 키'이다 보니 눈에 띄질 않았을 뿐입니다. 사실 '엔터 키'도 아스키 코드 값이 10인 '\n'으로 표현되는 문자입니다. 

 

 

 

 


 

■ EOF란

EOF란 End Of File 의 약자입니다. 즉 파일의 끝을 표현하기 위해서 정의해 놓은 상수(-1로 정의)입니다. 그래서 파일을 대상으로 fgetc 함수를 호출하고 그 결과로 EOF가 반환되면 '파일의 끝에 도달해서 더 이상 읽을 내용이 없다.'는 뜻입니다. 

 

그럼 키보드를 대상으로 하는 fgetc 함수와 getchar 함수는 언제 EOF를 반환할까요? 

1. 함수호출의 실패

2. Windows에서 CTRL + Z키, Linux에서 CTRL + D 키가 입력되는 경우

 

위 두 가지 경우입니다. 키보드의 입력에서는 '끝'을 알려줄 방법이 따로 없기때문에 (enter키는 문자) EOF의 반환시기를 CTRL + Z 같은 특정 키의 입력으로 정해놓았습니다. 이 점을 이용해 아래와 코드에서 탈출할 수 있습니다. 

 

#include

int main(void)
{
	int ch;
    while(1)
    {
    	ch = getchar();
        if(ch == EOF)  // EOF이 반환되야 while반복문을 탈출할 수 있음
        	break;
        putchar(ch);
    }
    return 0;
}

 

 

 

 

-----------------------------------

C언어 문법 총정리

목록 보러가기 

-----------------------------------

 

 

반응형


댓글