본문 바로가기

프로그래밍./C언어.

문자 입.출력 함수(putchar, fputc, getchar, fgetc)

stdin(표준 입력 스트림), stdout(표준 출력 스트림), stderr  (표준 에러 스트림)
stdin은 키보드로 입력 받는 것.
stdout는 모니터로 출력 하는 것.
stderr은 에러를 출력 하는 것.(모니터로)


문자 출력 함수의 원형.
int putchar (int c);
int fputc(int c, FILE * stream);

putchar, fputc 모두 하나의 문자를 출력할 때 일반적으로 사용하는 함수이다.
차이점은 putchar은 모니터로 출력하지만, fputc는 출력 스트림을 지정할 수 있다는 것.
즉, file로 출력 할 수도 있고, 모니터로 출력할 수도 있다.



문자 입력 함수의 원형.

int getchar(void);
int fgetc(FILE* stream);

getchar, fgetc 모두 하나의 문자를 입력할 때 일반적으로 사용하는 함수이다.
차이점은 putchar은 키보드로 입력 하지만, fputc는 입력 스트림을 지정할 수 있다는 것.
즉, file로 부터 입력 받을 수도 있고, 키보드로 입력 받을 수도 있다.

EOF란?
fputc, fgetc 처럼 파일로 부터 입력 받거나 파일로 출력하는 일이 생기는데
EOF의 실제 값은 -1이며, 파일의 끝에 도달했을 때 반환한다.
즉, 파일의 끝까지 다 읽어들이면 반환되는 값이다. 키보드로 입력 받는 경우는
Ctrl + Z 를 입력하면 파일의 끝이라고 정의 되어 있다.



간단한 사용 예제 (Ctrl + z를 입력 할 때까지 입력하는 문자를 출력하기)
#include <stdio.h>
void main()
{
char ch=0;

while(ch != 'EOF')
{
ch = getchar();   //fgetc(stdin)과 동일
putchar(ch); //fputc(ch, stdout)과 동일.
}
}

getchar, getch, getche 차이점.
3가지의 종류가 있다. 차이가 뭘까? 어떻게 보면 사실 결과는 같을 수도 있다.

비교

getchar()

getche()

getch()

버퍼 사용

O

X

X

화면 표시

O

O

X

종료 인식

\n

\r

\r

일단. 버퍼의 사용 여부의 차이.
버퍼를 사용하는 경우. 입력을 하면 바로 들어가는게 아니라 버퍼에 담긴다.
그 후 종료를 하게 되면 내용이 들어가게 되는데, 때문에 잘못 입력해도 엔터를 치기 전엔 수정 가능.

하지만, 버퍼를 사용하지 않는 getch, getche 의 경우 잘못 입력하고 백스페이스를 누르면
삭제되기는 커녕 백스페이스값이 들어간다..- -;;

그리고 화면표시의 차이.
단순하다. getch의 경우 입력한 값이 화면에 나타나지 않는다. - -;
getch를 반복해서 여러개 받는다고 해도, 화면에는 나타나지 않는다.
getche의 경우 화면에 출려된다. 이를 ehco 라고 하며 앞자를 딴 e가 붙는다고 한다.

getch, getche를 반복문으로 통해 사용하다가 끝내고 싶다면 '\r'을 사용해야 한다.




  유익한 정보가 되셨다면 아래의 추천도 부탁드려요 ^-^