본문 바로가기

C언어

Chapter 10. 바로알자 getchar()

Chapter 10.바로알자getchar()

특히 초보자에게황당한논리적인 에러를 짚고 넘어가자.

10_1.c

#include <stdio.h>

main()
{
int input_char = 0;

while(1)
{
printf("Input character : ");
input_char = getchar();

if((input_char == 'y') || (input_char == 'Y'))
puts("OK, 'y' input");
else
puts("NO");
}
}

gcc -o 10_1 10_1.c

./10_1

Input character : y
OK, 'y' input
Input character : NO
Input character : n
NO
Input character : NO
Input character :

getchar() 함수는 한문자만을 입력받는 것이 아니라 두 문자를 입력 받는다.

input_char= getchar();

위와 같이 getchar() 함수를 이용하면입력한 하나의 문자가 할당되지만 개행문자가 입력 버퍼에 쌓이게 된다.

왜냐하면, 문자를 입력하고 엔터키를 입력해야만getchar() 함수를 벗어날 수 있기 때문이다.

input_char = getchar(); getchar();

위의수식을 이용하면해결이 가능하나 아무 값도 입력하지 않은 채 엔터 키만 눌렀다면 문제가 발생된다.

이를 해결하기 위해 다음과같이 사용한다.

10_2.c

#include <stdio.h>

main()
{
int input_char = 0;

while(1)
{
printf("Input character : ");
input_char = getchar();

if(input_char == '\n') continue;
else getchar();

if((input_char == 'y') || (input_char == 'Y'))
puts("OK, 'y' input");
else
puts("NO");
}
}

gcc -o 10_2 10_2.c

Input character : y
OK, 'y' input
Input character :
Input character :
Input character :
Input character : n
NO
Input character :

'C언어' 카테고리의 다른 글

Chapter 13. (int *)pointer  (0) 2011.10.16
Chapter 14. void형 포인터  (0) 2011.10.16
Chapter 11. 가변 인자  (0) 2011.10.16
Chapter 12. 될 것 같으면서 안 되는 코드  (0) 2011.10.16
Chapter 7. strcpy()의 비밀  (0) 2011.10.16