#6. 화면 입력함수

2009. 8. 24. 16:51STUDY !/배워보자 C언어


 

이번에는 데이터를 입력하는 함수에 대해서 알아보자


입력함수에는

 

getc()

getch()

getche()

getchar()

gets()

scanf()

 

등이 있다. 물론 파일에 입력하는 함수도 있지만, 지금 할 것은 메모리로 데이터를 넘겨주는 함수이다.

 

입력함수는 출력함수와 모양이 거의 비슷할 뿐아니라, 그 기능도 크게 비슷하다. put get으로 바뀌었다고 생각하면 쉽다.

 

getc() [ int getc(FILE *stream) ]   in stdio.h

putc()가 출력을 위한 가장 기본적인 함수였다고 한다면, getc()함수는 입력을 위한 가장 기본적인 함수이다. 인자에 쓰인 FILE *stream 에는 어떤 파일에서 문자를 얻어올 것인지 묻는것인데, stdin이라고 써주면 화면에서 직접 입력을 받는다. (stdin이나 stdout도 하나의 파일이라고 한다.)

  이 함수는 읽어들인 문자를 되돌려준다. , 함수의 실행결과로 읽어들인 문자가 남는다는 것이다. 때문에, 이 문자를 사용하려면 함수 자체를 변수에 대입시켜주어야 한다. 예를 보자

 

Ex)

{

1      char ch;

2      ch = getc(stdin);

3      putc(ch, stdout); // putch, putchar 등 모든 출력함수가 사용가능하다.

}

 

윗 문장을 컴파일한 후 실행했다면 아무것도 없는 콘솔에 커서만 깜박이고 있을 것이다. 여기에 문자 하나를 입력하고 엔터키를 누르면, 내가 입력했던 문자가 출력된 후에 프로그램이 종료될 것이다.

 

 

getch() [ int getch(void) ]   in conio.h

putch()함수와 마찬가지로, 콘솔 입출력용으로 만들어진 함수이다. 이 함수는 인자가 하나도 없는데, getc()함수와 같이 입력된 문자를 리턴하기 때문에, 변수에 직접 대입해서 쓰거나 조건문에 직접 사용할 수 있다.

getch()함수는 입력한 문자를 화면에 표시하지 않는다. 즉 자기가 무슨문자를 입력했는지 확인할 수 없다.

, getch()는 엔터키를 기다리지 않는다. 키를 누른 순간 입력이 완료되고, 다음명령어로 넘어가게 된다. 예를 보면서 이해해 보자

 

Ex)

{

1      char ch;

2      ch = getch();

3      putch(ch);

}

 

getc()함수는 입력한 문자를 보여주기 때문에 'a'키를 입력했을 때, getc()함수 예제의 결과는 'aa'와 같이 나타나지만, getch()함수는 입력한 결과가 나타나지 않기 때문에, putch()함수에 의해서 출력되는 'a'만 화면상에 나타난다.

 

 

getche() [ int getche(void) ]   in conio.h

이 함수는 getch()함수와 똑같은 기능을 하지만, 입력한 문자를 화면에 출력해준다. 입력한 문자를 보여주는 기능을 에코기능이라고 하는데, getche getch Echo 의 약자인것으로 생각된다.

예제는 생략한다.

 

getchar() [ int getchar(void) ]   in stdio.h

키보드에서 문자 하나를 읽어온다. 이 함수도 putchar와 마찬가지로 stdio.h파일에 매크로로 정의되어 있는데, 그 원형이 getc함수이다. getc함수를 표준 입력으로만 사용하게 만들어 둔 함수이다. 이 함수는 출력에 있어서 버퍼를 사용하기 때문에, 문자 한 개를 입력 받을 때에 사용하기에는 부적당하다고 한다.

 

gets() [ char* gets(char* s) ]   in stdio.h

문자열을 입력받아 *s에 저장한다. 주로 배열이 사용되며, 장공간이 부족할 경우 저장공간을 넘어간 문장에 대해서는 결과를 예측 할 수가 없다.

 

scanf() [ int scanf(const char *format [,adress … ] ) ]   in stdio.h

printf()함수와 비슷하게, 형식이 지정된 문자열을 읽어들일 수 있다. 단 숫자를 입력받을때는, 저장되는 변수에 주소연산자(&)를 써주어야 한다. 형식은 변환문자를 이용한다.

 

Ex)

{

1      int i = 0;

2      char ch = 0;

3      scanf("%c / %d", ch, &i)

}

 

위와 같은 경우 'a / 10'과 같이 입력하면 ch에는 a가 입력되고, i에는 10이 입력된다.

 

 

출력함수에 비해서 내용이 매우 간단해진 것 같다는 생각이 너무 많이 든다. 지금 정신이 없어서인지는 잘 모르겠지만 더 생각나는 것이 없으므로 여기서 마치도록 하겠다.

나머지 부분에 대해서는 실습을 통해 알아가기를 바란다. C언어는 컴퓨터와 대화하는 '언어'이기 때문에 직접 사용해보지 않으면 머리속에 남지 않는다. 꼭 여러가지 장난을 쳐보기를 바란다.

'STUDY ! > 배워보자 C언어' 카테고리의 다른 글

#8. 반복문 - do-while문  (2) 2009.08.26
#7. 반복문 - while문  (0) 2009.08.25
#5. 화면 출력함수  (0) 2009.08.21
#4. 문장의 구성요소  (0) 2009.08.20
#3. C언어의 구성요소(1)  (0) 2009.08.19