char를 입력받을 때 흔히 쓸 수 있는 것이 getchar() 이다..
하지만 getchar()는 쓸 때 한가지 명심할 것이 있다...
getchar() 함수를 써서 값을 입력받은 후, 엔터를 치면 함수가 진행된다...
그 때 개행 문자 하나도 같이 버퍼에 쌓이게 된다...
그 후 getchar()가 실행되어서 버퍼에서 입력된 값을 받은 후..
또 다시 1번 더 getchar()를 실행해 버린다...
예를 들면.. 지금 입력된 값이 y 인지 n 인지 판단하는데..
y 값이면 y, 나머지는 n로 인식된다고 생각해보자...
y 후에 엔터를 쳤더니,
한번은 y로 인식했는데 자동으로 다음에는 n 를 한번 더 인식한다.
( 반복문일 경우임 )
이유는 처음에는 y를 입력받은 걸로 처리하고, 또 버퍼에 값이 있어서 값을 보
니.. \n 인 것이다. 그래서 y가 아니기 때문에.. n로 인식하는 것이다..
이럴때는 getchar()를 2번 연속으로 적으면 된다..
int a = getchar() ; getchar() ;
이렇게 되면 자동으로 a에는 첫 입력값, 그 후에는 그냥 버퍼에 값을 한번 더 부
를 뿐이다....
하지만 문제가 하나있다..
그냥 값 입력없이 엔터를 쳤을 때다... 그렇게 되면 처음 getchar()에서 개행 문
자로 인식 되지만, 뒤의 getchar()에서 문제를 일으킨다..
그래서 이 것을 모두 해결한 코드는..
if( a == '\n') continue;
else getchar() ;
이렇게 쓰면 된다..
'프로그래밍 > C,C++' 카테고리의 다른 글
[C,C++] 인-라인(in-line) 함수 (0) | 2011.09.14 |
---|---|
[C,C++] 가변 인자란 ... (0) | 2011.08.28 |
[C,C++] scanf 와 fgets (0) | 2011.08.27 |
[C,C++] sprintf 사용하기... (2) | 2011.08.23 |
[C,C++] 문자열에 대하여... (0) | 2011.08.23 |