C/C++에서 표준 입력을 받아야 하는 경우 엔터가 입력으로 받아져, 정작 받아야 할 입력을 건너 뛰는 경우가 있습니다. 다음 예를 살펴 볼까요 :
char ch1, ch2;
printf("첫번째 문자를 입력하시오");
scanf("%c", &ch1);
printf("두번째 문자를 입력하시오");
scanf("%c", &ch2);
위와 같이 코딩을 한다면 첫번째 문자를 입력하고 엔터를 치게 되면, 입력 버퍼에 엔터 문자가 남아있게 되어 두번째 입력에서 엔터를 자동적으로 입력을 받아 버리기에 정상적인 입출력이 이루어지지 않습니다.
위 문제를 해결하기 위해 fflush(FILE* fp) 함수와 잘 알려지지 않은 방법으로 "%*c" 포멧을 사용할 수 있습니다.
fflush는 입력 버퍼 버퍼를 비워버리고, %*c는 문자 입력을 무조건 무시하라는 뜻이다.
위의 사항을 가지고 다시 코드를 작성 해보겠습니다.
fflush
printf("첫번째 문자를 입력하시오");
scanf("%c", &ch1);
fflush(stdin); //입력 값이 파일 포인터이므로 stdin을 써주면 된다.
//버퍼에 들어 있는 내용을 다 비워 버리므로 다음에 읽어 올것이 없다.
printf("두번째 문자를 입력하시오");
scanf("%c", &ch2);
"%*c"
printf("첫번째 문자를 입력하시오");
scanf("%c%*c", &ch1); // "%*c"는 입력 되는 문자 하나를 무시하라는 뜻이다.
// 여기서는 엔터를 무시한다.
printf("두번째 문자를 입력하시오");
scanf("%c", &ch2);