hoop를 입력하게되면, h만 출력이 되고 나머지 oop\n(엔터키)는 입력버퍼에 남아있게 된다. 그래서 버퍼를 비워주지 않으면 문자열을 입력할때 입력할 기회를 잃게된다.


입력버퍼를 비우는 방법에는 fflush(stdin) 함수가 있지만 이 함수는 visual studio에서만 국한된다. 다른 컴파일러에서는 사용이 안될수도 있다.

그래서 일반적인 방법이 getchar 함수로 입력버퍼를 비워주는 것이다. 


while(getchar() != '\n'); 라는 것으로 입력버퍼를 비워주고 있는데, 이 명령의 뜻은, 일단 getchar()함수로 버퍼에 남아있는 것을 읽어들인다. 문자 단위로

그런 다음, \n과 비교를 한다. 비교를 하여서 \n이 아니면 남아있는 것을 계속 읽어들이면서 비워낸다. 마지막으로 \n을 읽어들인 후 비교를 한다. 조건에 부합되지않기 때문에 반복문 종료. 

따라서 버퍼에는 아무것도 남아 있지 않게 된다.


저것을 풀어 쓰면, 


char a;

while(1)

{

      a = getchar();

      if(a == '\n')

            break;

}


Posted by scii
: