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() 함수를 벗어날 수 있기 때문이다.
위의수식을 이용하면해결이 가능하나 아무 값도 입력하지 않은 채 엔터 키만 눌렀다면 문제가 발생된다.
이를 해결하기 위해 다음과같이 사용한다.
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 |