BLOG ARTICLE THINKING about ERROR | 1 ARTICLE FOUND

  1. 2011.10.30 [미해결됨] fflush() 함수의 사용

윈도우 vc++ 환경에서 fflush()를 fflush(stdin)과 같이 입력 버퍼를 비울 때 사용했었다. 그러나, 리눅스에서 코딩을 하다 보니 fflush()의 원래 용도는 입력 버퍼를 비우는 것과 전혀 상관이 없다는 사실을 알게 되었다. 윈도우에서 코딩할 때는 visual studio에서 알아서 확장하였기 때문에 (MSDN에 나와 있음) 상관이 없지만, 리눅스 환경에서 이식성이 없다.

윈도우 환경에서만 fflush(stdin)을 사용하는 것과 마찬가지로
리눅스 환경에서만 사용 가능한 __fpurge(stdin)이라는 함수가 있는데..

리눅스에서 아무리 테스트해도 버퍼가 비워지지 않는다.
코드가 잘못된 것일까.

아래는 내가 작성한 예제 코드. (아래 코드에서 주석을 해제하면 된다.)


이 코드를 작성한 이유는 아래와 같은 상황이 연출되기 때문이다.


입력 받기 전에 남아 있는 표준 입력 버퍼를 비워서 이 문제를 해결하고 싶은데
좋은 방법이 없을까. 

__fpurge() 함수를 테스트하기 위해 아래와 같은 코드를 작성해보았으나
역시나 동작하지 않는다. 무슨 문제일까.

 
AND