[버퍼 (buffer)]
정의 : printf(), scanf() 등 표준 입출력 함수를 사용시 입력이 저장된 '임시 메모리 공간'
장점 :
- 문자를 하나씩 전달함이 아닌 묶어서 한번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상
- 사용자가 문자를 잘못 입력했을 경우 수정 가능
버퍼링 방식 :
- 완전 버퍼링 (Fully buffered) : 버퍼(buffer)가 가득 차면, 버퍼(buffer)의 내용물을 목적지로 전송
ex) 파일 입출력
- 라인 버퍼링 (Line buffered) : 입력된 문자 중 개행 문자가 나타날 때마다 버퍼(buffer)의 내용물을 목적지로 전송
ex) 키보드 입력
- 버퍼(buffer)는 출력에도 쓰일 수 있는데, 출력하고자 하는 데이터를 출력 데이터(buffer) 에 저장하였다가 출력 스트림을 통해 모니터로 전송.
버퍼(buffer) 초기화 :
- input(입력) 스트림 초기화 :
getchar(); 함수 이용
- output(출력) 스트림 초기화 :
fflush(); 함수 이용
정의 : 인수로 전달된 출력 스트림에 연결된 버퍼를 비워준다.
특징 :
- 스트림이 인수로 전달되면 출력 버퍼 내부 데이터를 즉시 목적지로 전송.
- input 스트림에서 동작하지 않는다. (*오류 주의)
- fflush() 함수는 버퍼(buffer) 를 비우는데 성공하면 0 을 return 하고, 실패하면 EOF(End Of File) 를 return.
< 오류 예제>
#include <stdio.h>
#include <stdlib.h>
int main(){
char str[15];
int i;
for(i=0; i<5; i++){
scanf("%[^\n]s", str);
printf("%s\n", str);
}
return 0;
}
<정상 예제>
#include <stdio.h>
#include <stdlib.h>
int main(){
char str[15];
int i;
for(i=0; i<5; i++){
scanf("%[^\n]s", str);
printf("%s\n", str);
// 버퍼를 초기화 시키고 다음 문자열을 받음
fflush(stdin);
}
return 0;
}
'C > Definition&Grammar' 카테고리의 다른 글
[C] 유니온 (Union) (0) | 2021.03.12 |
---|---|
[C] getch / putch (0) | 2021.03.12 |
[C] 그래프 알고리즘 (Graph Algorithm) (0) | 2021.03.11 |
[C] 삽입 / 선택 / 버블 정렬 (0) | 2021.03.10 |
댓글