|
일단 fflush()의 역할은
"스트림을 비웁니다.
만약 스트림이 쓰기용으로 열려있다면 출력버퍼는 물리적으로 파일에 쓰기를 합니다. 만약 스트림이 읽기용으로 열려있다면 입력 버퍼의 내용은 clear됩니다. 스트림은 이 호출 후에도 열려 있게 됩니다. 파일이 닫힐 때, 모든 버퍼와 조합된 것들은 자동적으로 비워지게(flush)됩니다. 만약 프로그램이 종료되면, 모든 버퍼는 자동적으로 flush됩니다."
이라고 인터넷에 나오네요.
저는 단순히 clear만 생각을 했는데, 스트림의 종류에 따라 조금 다른가봅니다.
그리고, 확실하진 않지만요.
("r, s, t, q 중의 한 문자를 입력하시오.\n"); 이 부분이 2번 나오는 것은..
제가 후킹공부하다 느낀 건데..
키보드 1번 클릭하면, 2번 클릭정보가 왔었거든요.
1개는 getchar()로 쓰고, 1개가 남아서 그런 2번 출력이 되지 않나 싶네요.
그래서 fflush로 clear시켜버려서, 2번 출력되지 않도록 하지 않나.. -.-
수고하세요.
박기범 님이 쓰신 글 :
: #include<stdio.h>
: main(){
: int i, j;
: float size;
: char c;
: printf("r, s, t, q 중의 한 문자를 입력하시오.\n");
: while((c=getchar())!='q')
: {
: /* 원의 넓이를 구하기 위한 소스*/
: if (c=='r')
: {
: printf("원의 반지름 입력하시오. ");
: scanf("%d", &i);
: size=3.14*i*i;
: printf("원의 면적은 %f입니다.\n", size);
: }
:
: /* 사각형의 넓이를 구하기 위한 소스*/
: else if (c=='s')
: {
: printf("사각형의 가로를 입력하시오. ");
: scanf("%d", &i);
: printf("사각형의 세로를 입력하시오. ");
: scanf("%d", &j);
: size=i*j;
: printf("사각형의 면적은 %f입니다.\n", size);
: }
:
: /* 삼각형의 넓이를 구하기 위한 소스*/
: else if (c=='t')
: {
: printf("삼각형의 밑변을 입력하시오. ");
: scanf("%d", &i);
: printf("삼각형의 높이를 입력하시오. ");
: scanf("%d", &j);
: size=(i*j)/2;
: printf("삼각형의 면적은 %f입니다.\n", size);
: }
:
: else
: {
: printf("r, s, t, q 중의 한 문자를 입력하시오.\n");
: fflush(stdin);
: }
: }
: }
:
: =========================
: 이 소스인데 마지막에 fflush(stdin);를 넣어줘야 출력시
: r, s, t, q 중의 한 문자를 입력하시오.
: 위의 문장이 두번 출력이 안되는데 정확하게 fflush(stdin); 하는 역할을 알고싶습니다.
: 괄호속의 stdin은 스탠다드 인풋(즉 키보드)라는 것도 맞는지요?
: 그럼 답변부탁드립니다...
:
|