기본 입출력 함수


  : getchar, putchar, _getch, _getche

문자열 : gets_s, puts

문자, 문자열, 숫자(정수, 실수) : scanf, printf



문자 입출력 함수

 

getchar / putchar

getchar : 사용자가 키보드로 입력한 문자 혹은 

문자열에서 한 글자를 읽어서 반환하는 함수.

표준입력장치(키보드)의 입출력버퍼(I/O buffer)를 

사용하는데 버퍼가 비어있으면

키보드 입력을 기다리고 어떤 문자가 채워져 있으면 

그 문자를 읽어서 반환하는 것.


putchar : 문자를 모니터화면(콘솔)에 출력하는 함수.

 


    char ch;

    ch = getchar();

    putchar(ch);


    위와 같은 소스를 실행하면 getchar함수는 

버퍼가 비어있는지 확인 후에 비어 있다면 

사용자의 키보드입력을 기다리고 ‘TEST’를 입력한다면 

버퍼메모리에 T,E,S,T,0(null문자)라는 

문자가 채워지게 되고 putchar함수에 의해서 

'T'라는 문자가 출력된다.


char ch;

    ch = getchar();

    putchar(ch);

    ch = getchar();

    putchar(ch);

 

    다른 예로 살펴보면 위 코드를 실행하고 

‘TEST’라는 문자열을 입력하면 ‘TE’라는 문자가 출력된다.

    왜나하면 getchar함수가 입출력버퍼가 비어있는지 확인 후에 

비어있다면 사용자로부터 입력을 요구하게 되고 

사용자가 ‘TEST’를 입력하게 되면 버퍼에 왼쪽부터 차례대로 

문자가 채워지게 되는 것이고,

    getchar함수가 사용자로부터 입력받은 첫 번째 문자인 ‘T’를 

반환하며 그 값이 변수 ch에 대입된다.

그래서 putchar함수에 의해서 변수 ch에 들어있는 정보인 

'T'라는 문자가 출력이 된다.


    이제 버퍼엔 ‘T’라는 문자가 빠지게 되고 

남은 문자열인 ‘EST’가 다시 왼쪽부터 차례대로 저장된다.

    getchar함수가 다시 실행되면 버퍼가 비어있는지 확인하는데

현재는 버퍼에 저장된 정보가 있기 때문에 사용자로부터 

입력을 받지 않고 바로 버퍼에 있는 문자 하나를 반환하게 된다.

그러므로 남아있는 문자열 중에서 가장 왼쪽에 저장된 

‘E’getchar함수가 반환하므로 변수 ch에 현재 저장되어 

있는 문자‘T’에 문자‘E’overwrite된다.

    그리고 putchar함수에 의해서 변수 ch에 overwrite되어 

저장된 문자인 ‘E’가 출력되는 것이다.




* 참고 *

 

getchar함수는 문자 하나를 반환하므로 변수에 이미 문자가 

저장되어 있는 경우에 이미 저장되어 있는 문자는 지워지고 

새롭게 반환된 문자가 덮어써진다.



ch = getchar() 라는 코드는 getchar()함수를 ch 변수에 

대입한다는 의미가 아니고, 

getchar()함수가 반환한 값을 ch라는 변수에 대입한다는 의미.

 

 

버퍼(buffer) : 하나의 장치에서 다른 장치로 데이터를 전송할 

경우에 둘 사이의 전송속도 차이를 해결하기 위해서 전송할 정보를

임시로 저장하는 기억장치.


버퍼링(buffering) : 버퍼에 데이터를 일시적으로 채우는 것

(정보를 메모리(버퍼)에 저장하는 것)


플러싱(flushing) : 채워진 정보를 비우는 것


 

문자의 끝은 항상 null문자가 채워진다.

‘ABC’를 우리가 키보드를 통해서 입력했으면 메모리에는 

‘ABC'null'’이런식으로 저장된다.


 

문자를 표시할 때는 ‘AB’ 이렇게 표시하면 안된다

이 경우 마지막 문자인 B만 출력되므로 문자 하나를 표시할 때는 

'A'나 'B'이런식으로 표시해야한다.



문자열을 표시할 때는 “AB” 이렇게 큰 따옴표로 표시한다.






** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **


** 이 블로그의 C언어 공부에 대한 정리는 최호성 강사님의 유튜브 강의와 카페에 배포해주신 열혈강의(pdf)본을 보고 듣고 정리하였습니다 **

+ Recent posts