본문 바로가기
C/Definition&Grammar

[C] 버퍼(buffer)

by 꾸압 2021. 3. 15.

[버퍼 (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

댓글