[C] - scanf() 함수

C 2014. 9. 8. 15:51
#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
블로그 이미지

행복그리고..

,