#include <stdio.h> int main(void) { int nData = 0; char chCode = 0; printf("Data : "); scanf("%d", &nData); chCode = getchar(); printf("Data : %d\n", nData); printf("chCode : %d\n", chCode); return 0; }
scanf()함수로 정수를 입력하였을때 버퍼에는 \n문자가 남아있다는걸 chCode변수로 확인 할 수 있습니다. 그래서 보통에 경우에는 fflush(stdin); 코드로 플러싱을 해줍니다.
#include <stdio.h> int main(void) { int nData = 0; char chCode = 0; printf("Data : "); scanf("%d%*c", &nData); chCode = getchar(); printf("Data : %d\n", nData); printf("chCode : %d\n", chCode); return 0; }
%d 형식 문자 외에 %*c라는 형식 문자가 추가된 형태인데, 이것은 문자 하나를 입력 버퍼에서 읽어온 후 그냥 버린다는 의미입니다. 따라서 정수와 함께 입력한 줄 바꿈 문자가 버퍼에서 꺼내어지고 버려집니다.
위의 코드를 실행해보시면 다시 버퍼가 비워져 다시 getchar()함수가 실행되는것을 보실 수 있습니다.
scanf()의 형식 문자에서 %기호와 형식 문자 사이에 위치한 *는 '버림'을 의미합니다. 오로지 윈도우 환경만 고려해도 된다면 fflush(stdin); 같은 코드도 나쁘지 않습니다. 그러나 다양한 환경을 모두 고려해야 한다면 반드시 두 번째 해결 방법을 이용해야 합니다.
[ 출저 ] - 명강의로 완성하는 C 프로그래밍
'C' 카테고리의 다른 글
[C] - 환경변수 출력 (0) | 2014.09.08 |
---|---|
[C] - const 포인터 사용법 (0) | 2014.09.08 |
[C] - 스캔셋(Scanset) (0) | 2014.09.08 |
[C] - getchar(), _getch(), _getche() 차이점 (0) | 2014.09.08 |
[C] - 동적으로 할당된 메모리 크기 알기 (0) | 2014.09.08 |