일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- 네트워크 프로그래밍
- 졸업 작품 소재
- 졸업 작품
- C++
- 소켓 통신
- 클래스 다이어그램
- 소스 코드
- 유튜브 동영상 강의
- c언어
- 파이썬
- 표준 입출력
- 표준 라이브러리 함수
- 실습으로 다지는 c#
- 충남 천안
- 산책하기 좋은 곳
- 동영상
- 원격 제어 프로그램
- Windows Forms
- 프로젝트
- 안드로이드 앱 개발
- 언제나휴일
- 추천
- 실습
- 무료 동영상 강의
- 강의
- 언제나 휴일
- c#
- 캡슐화
- 동영상 강의
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
fflush 함수 [C언어 표준 라이브러리 함수] 본문
int fflush ( FILE *fp); 파일 스트림 버퍼를 비우는 함수
입력 매개 변수 리스트
fp 파일 스트림
반환 값
성공 시 0, 에러 시 EOF
출력 스트림 버퍼에 남아있는 내용을 출력 스트림에 출력하는 동작을 수행합니다. 하지만 입력 스트림에서 어떻게 동작해야 하는지는 표준 문서에서 정의하지 않았습니다.
scanf 함수처럼 포멧에 맞게 입력을 받을 때 최종 사용자의 입력 내용이 포멧 문자열보다 더 많은 내용을 포함하고 있으면 버퍼에 처리하지 않은 데이커가 남습니다. 이처럼 스트림 버퍼의 내용을 비울 때 fflush 함수를 사용합니다. 하지만 C 표준 문서를 보면 구체적인 행위를 정의하지 않았습니다.
실제 컴파일러에 따라 처리하는 방식이 다릅니다. 저자가 테스트 해 본 Microsoft Visual Studio 2010에서는 제대로 버퍼를 비우지만 Microsoft Visual Studio 2015에서는 아무런 작업도 하지 않음을 확인하였습니다. gcc나 tc 등도 버전에 따라 다르게 동작합니다.
이에 관한 다른 의견이 계시면 jejutour@daum.net 으로 메일을 보내주세요.
사용 예
//C언어 표준 라이브러리 함수 가이드
//int fflush ( FILE *fp); 파일 스트림 버퍼를 비우는 함수
//두 개의 피연산자와 연산자를 입력받아 연산 결과를 출력
#include <stdio.h>
int main()
{
int left,right;
char op;
printf("왼쪽 피연산자 : ");
scanf_s("%d",&left);
fflush(stdin); //표준 입력 스트림 버퍼를 비워줌
printf("오른쪽 피연산자 : ");
scanf_s("%d",&right);
fflush(stdin);//표준 입력 스트림 버퍼를 비워줌
printf("연산자 : ");
scanf_s("%c",&op,sizeof(op));
fflush(stdin);//표준 입력 스트림 버퍼를 비워줌
//입력한 연산자에 따라 연산 결과를 출력함
switch(op)
{
case '+': printf("%d\n",left+right); break;
case '-': printf("%d\n",left-right); break;
case '*': printf("%d\n",left*right); break;
case '/':
if(right)
{
printf("%d\n",left/right);
}
else
{
printf("divide zero\n");
}
break;
default: printf("연산 기호를 잘못 입력하였습니다.\n"); break;
}
return 0;
}
출력(Microsoft Visual Studio 2010 이하 버전)
왼쪽 피연산자 : 23 abc (의도적으로 포멧 지정보다 많이 입력)
오른쪽 피연산자 : 12 hello (의도적으로 포멧 지정보다 많이 입력)
연산자 : + yahoo (의도적으로 포멧 지정보다 많이 입력)
35
출력(Microsoft Visual Studio 2015)
왼쪽 피연산자 : 23 abc (의도적으로 포멧 지정보다 많이 입력)
오른쪽 피연산자 : 연산자 : 연산 기호를 잘못 입력하였습니다.
이처럼 입력 스트림을 입력 인자로 fflush 함수를 사용할 때는 매우 신중하게 사용하셔야 합니다.
'C & C++ > C언어 표준 라이브러리 함수' 카테고리의 다른 글
fseek 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.06 |
---|---|
ftell 함수 [C언어 표준 라이브러리 함수] (1) | 2024.02.05 |
fread 함수 [C언어 표준 라이브러리 함수] (1) | 2024.02.05 |
fwrite 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.02 |
vprintf 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.02 |
sscanf 함수, sscanf_s 함수 [C언어 표준라이브러리 함수] (0) | 2024.02.02 |
sprintf 함수, sprintf_s 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.01 |
fscanf 함수, fscanf_s 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.01 |