티스토리 뷰

C언어 잡기술/C

getchar()에 대해서

Teus 2021. 12. 26. 19:51
728x90
반응형

C언어의 바이블로 불리는 C Programming Language에서 보면, 초반에 아래와 같은 코드가 등장합니다.

 

#include <stdio.h>
int main()
{
    int c;
    while ((c=getchar()) != EOF){
        putchar(c);
    }
}

책을 읽기전까지, getchar는 단순하게 사용자의 Input을 받고, 이때 단어 하나만 받아올 수 있다

 

라고 알고있었습니다.

 

하지만, 위의 코드를 보면, 

 

1. c를 int형으로 선언한다

2. getchar로 c에다가 input을 받는다

3. (나의 예상)c의 첫 글자가 EOF인지 확인한다.

4. 아니면 첫글자를 화면에 출력하고, 다시 Input을 받는다

 

였습니다.

 

하지만 위 코드를 실행해보면, 한 단어가 아니라 입력받은 모든 단어를 출력하는 것을 알 수 있습니다.

위 단서는 아래 IBM 공식 사이트에서 찾을 수 있습니다.

https://www.ibm.com/docs/ko/i/7.3?topic=functions-getc-getchar-read-character 

 

보면 중간에 "getchar 함수는 getc(stdin)과 같습니다" 라는 부분을 볼 수 있습니다.

 

getc는

1. 버퍼에 데이터가 있는지 확인

2_1. 버퍼가 비어있으면 stdin(표준 입력 스트림)으로 데이터를 받고, 이를 buffer에 저장

3. 버퍼에 있는 데이터 하나를 return한다.(버퍼에 데이터는 하나 줄어듦)

 

대충 이제 getchar의 실체를 알았습니다. 그럼 이제 저 위의 코드가 어떻게 동작하는지 아래처럼 이해할 수가 있습니다.

1. c를 int형으로 선언한다

2. (실제)버퍼에 데이터가 비어있는지 확인하다.

3. (실제)stdin이 동작하여 사용자의 input을 받고, 이를 버퍼에 저장한다.

4. getchar()의 return값으로 Buffer에 저장된 첫 데이터가 int형태로 반환되고, 이 데이터가 c로 할당된다.

5. c가 EOF인지 확인한다.

5. EOF가 아닐 경우 할당된 c가 화면에 출력된다.

6. getchar가 다시 실행되면서

 

였던 거였습니다..(Python Class마냥 독특한 iterator 설정같은게 있는줄 알았습니다)

 

 

728x90
반응형

'C언어 잡기술 > C' 카테고리의 다른 글

C언어 배열에 대해사  (0) 2022.07.18
malloc()에 대해서  (0) 2022.03.13
C언어 포인터에 대해서  (0) 2022.02.11
alloc()에 대해서  (0) 2021.12.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함