컴퓨터에는 표준 입출력 장치 및 표준 에러 출력 장치가 있다.
시스템 내부적으로 연결 경로가 있는데, 보통 stdin, stdout, stderr(전문용어로 FILE STREAM INDENTITY)이 있다.
stdin은 외부로부터 컴퓨터쪽으로 입력을 받는 표준장치(keyboard)의 버퍼의 식별자로 보면된다.
stdout은 컴퓨터 내부의 처리 결과를 출력해주는 표준 출력장치(모니터)로 보면 된다.
stderr은 시스템이 다운되었어도 다운된 사유에 대해서 컴퓨터 내부 주변 환경에 영향을 받지않고 화면에 메시지를 전송할 수 있는 표준 에러처리라고 보면된다.
stdin에 대해, 말하자면,
보통 키보드에서 컴퓨터 응용프로그램으로 데이터가 입력을 받을 때, 중간 버퍼를 통해 이루어지는데, scanf는 엔터키가 들어올 때까지 입력 받는 모든 데이터를 중간 버퍼에 저장을 한다.
만약 사용자가 엔터키 값을 입력하게 되면 버퍼에서 엔터키 값을 제외한 입력 받는 모든 데이터를 읽어들이게 되고, 버퍼에 남아있는 값은 엔터키 값만 남아 있게 된다. 바로, 이것에 의해 scanf등의 표준 입력 함수를 호출할 경우, 이 쓰레기 값을 읽어들여 사용자로부터 제때에 입력받지 못하게 되는 것이다. 또한, 버퍼에 또다른 쓰레기 값이 존재할 경우에도 동일한 현상이 나타날 것이다.
그러므로, 표준 입력장치(stdin)으로부터 버퍼의 내용을 깨끗하게 제거를 하기 위해서 fflush를 사용해야 한다.
출처 : devpia.com / 엄태준(creactive)
'dev, tech' 카테고리의 다른 글
행의 갯수 세기 (0) | 2006.05.03 |
---|---|
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> getc, getch, getchar, gets 의 차이점 (0) | 2006.05.03 |
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> (데이터구조) 스택과 큐 (0) | 2006.04.22 |
큐(queue) (0) | 2006.04.21 |
이중 연결 리스트를 이용한 텍스트 뷰어 (0) | 2006.04.18 |
댓글