ArtWorker 2006. 10. 20. 10:52
인터넷 검색과 여러번의 테스트 결과 다음과 같은 답변을 얻었습니다.

getchar()와 scanf() 함수는 버퍼형 입력 함수로서
버퍼에 저장되어 있는 그 전에 입력한 엔터값을 읽어들이기에 이같은 문제가 발생하는 것입니다.

예를 들어

char c;
c=getchar();
printf("%c", c);
c=getchar();
printf("%c", c);
c=getchar();
printf("%c", c);

이같이 실행시키면 키보드로부터 3번을 입력받아야 함에도 불구하고
첫번째 입력 시의 마지막 엔터값 때문에 2번째 getchar() 는 엔터값을 버퍼로부터
읽어들이고 바로 세번째 입력으로 넘어가게 돼 실행결과 2번 입력을 받게 되는 것을 알 수 있습니다.

char c;
scanf("%c", &c);
printf("%c", c);
scanf("%c", &c);
printf("%c", c);
scanf("%c", &c);
printf("%c", c);

위의 결과 또한 getchar() 와 같이 scanf() 도 버퍼형 입력 함수이므로
키보드로부터 2번 입력받게 된다는 것을 알 수 있습니다.

scanf() 의 경우는 문자형을 입력받을 때만 위와 같은 현상이 일어나므로
scanf() 로 문자형 입력받기 이전에 다른 값을 입력받은 적이 있다면
교수님께서 말씀하신 것처럼

scanf(" %c", &c);

이와 같이 %c 앞에 한 칸을 띄우면 앞의 엔터값은 무시를 하게 되어
정상작동하는 것을 알 수 있습니다.

혹시 궁금해 하고 있는 학생들이 있을까 하여 나누고자 이렇게 게시판에
글 올립니다. ^^