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, C++' 카테고리의 다른 글
[ C ] 문자열 함수 이해하기5_표준 입출력과 버퍼_버퍼링 하는 이유/fllush 함수/입력 버퍼 비우기 (398) | 2020.07.22 |
---|---|
[ C ] 문자열 함수 이해하기4_문자열 단위 입출력 함수_puts, fputs, gets, fgets (398) | 2020.07.21 |
[ C ] 문자열 함수 이해하기2_스트림과 데이터의 이동 (375) | 2020.07.21 |
[ C ] 문자열 함수 이해하기1_C 스타일 문자열이란? / 문자열 길이 구하기 (393) | 2020.07.21 |
C언어 문법 총정리_프로그래밍 독학이나 컴퓨터공학과를 준비하는 분을 위한 (426) | 2020.07.21 |
댓글