출력버퍼를 비우는 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");
}
출력 결과
'4. 프로그래밍 기초 > 4_2 C' 카테고리의 다른 글
[열혈 C프로그래밍] gets와 fgets - 문자열 입력 방법 (0) | 2020.05.16 |
---|---|
[열혈 C프로그래밍] puts와 fputs - 문자열 출력 방법 (0) | 2020.05.16 |
[열혈 C프로그래밍] 도전 프로그래밍1 정답 (0) | 2018.12.29 |
[열혈 C프로그래밍] 스트림과 문자 입출력 함수 연습문제 (0) | 2018.12.22 |
[열혈 C프로그래밍] 함수 포인터와 void 포인터 연습문제 (0) | 2018.12.22 |