본문으로 바로가기

   

 

출력버퍼를 비우는 fflush 함수

출력버퍼가 비워진다는 것은 출력버퍼에 저장된 데이터가 버퍼를 떠나서 목적지로 이동됨을 뜻합니다.

#include <stdio.h>
int fflush(FILE * stream);
// 함수호출 성공 시 0, 실패 시 EOF 반환

 

fflush(stdout); // 표준 출력버퍼를 비우자
버퍼에 저장된 내용이 비워지면서 데이터가 목적지로 이동합니다.
참고로 위의 함수는 파일을 대상으로도 호출이 가능합니다.

#include <stdio.h>
#include <Windows.h>



void main()
{
	char perID[7];
	char name[10];

	fputs("주민번호 앞 6자리 입력: ", stdout);
	fgets(perID, sizeof(perID), stdin);

	fputs("이름 입력 : ", stdout);
	fgets(name, sizeof(name), stdin);

	printf("주민번호 : %s \n", perID);
	printf("이름 : %s \n", name);

	system("pause");
}

 

출력 결과

 

분명히 주민번호 앞 6자리만 입력하라고 했는데, -를 포함하여 총 14자리의 주민번호를 전부 입력하였습니다. 그래서 fgets함수호출을 통해서 여섯 개의 문자가 읽혀지고, 12행의 fgets 함수호출을 통해서 여섯 개의 문자가 읽혀지고, 12행의 fgetes 함수호출을 통해서 나머지 문자들이 읽혀진 것입니다.

void ClearLineFromReadBuffer()
{
	while (getchar() != '\n'); 
}
//입력버퍼에 저장된 문자들은 읽어 들이면 지워진다. 그래서 \n을 만날 때까지 문자를 읽어들이는 함수를 정의 

 

#include <stdio.h>
#include <Windows.h>

void ClearLineFromReadBuffer()
{
	while (getchar() != '\n');
}


void main()
{
	char perID[7];
	char name[10];

	fputs("주민번호 앞 6자리 입력: ", stdout);
	fgets(perID, sizeof(perID), stdin);

	ClearLineFromReadBuffer();

	fputs("이름 입력 : ", stdout);
	fgets(name, sizeof(name), stdin);

	printf("주민번호 : %s \n", perID);
	printf("이름 : %s \n", name);

	system("pause");
}

 

출력 결과