본문 바로가기

프로그래밍/c언어

fflush(stdin);


fflush(stdin); // 키버퍼를 비워주는 역할

ex)
----------------------------------------
char c;
int a;

printf("문자 하나를 입력하세요:");
scanf("%c",&c);
printf("숫자 하나를 입력하세요:");
scanf("%d",&a);
printf("입력한 숫자 %d, 문자 %c입니다.\n",a,c);
---------------------------------------
분명히 잘못된 결과값이 나올 것이다.
scanf는 하나씩 입력버퍼에서 가져오는데
문자하나를 입력할 때 '문자' 엔터 쳤을 경우 
입력버퍼에는

 

  문자  \n

이렇게 두개가 저장되어 있다. 처음에 문자를 가져가
그 변수값에 저장하고 그다음 입력받을 때 문제가 생기는 것이다. 
이미 입력버퍼에 '\n'이 남아있으니까 \n를 입력 한걸로 알고  또다른 변수에
'\n'을 가져가서  입력하기도전에 그냥 엔터를 친거로된다.
그래서 입력버퍼를 비워줘야되므로 그 때 사용하는 것이 바로fflush(stdin);

scanf를 쓰고 바로 비우던 scanf쓸때마다 바로윗줄에 비워주기를 써주던 상관은 없다. 

'프로그래밍 > c언어' 카테고리의 다른 글

사용자 이름,성,중간이름 받기  (0) 2011.02.16
typedef  (0) 2011.02.02
기초중기초(파일입출력)  (0) 2011.01.08
도서관리프로그램  (0) 2011.01.08
BMI비만도측정 프로그램  (0) 2011.01.07