2012. 7. 13. 14:44

scanf()함수에 대한 호출이 실행되고 사용자가 한 행의 텍스트를 입력할경우 다음과 같은 문제점이 일어날수 있다

-사용자가 입력한 행이 서식 문자열이 필요로 하는 것보다 더 많은 요소를 가지고 있다. 예를 들어 사용자가 12 14 16을 입력하고 엔터키를 눌렀다고 해보자 scanf()는 11 16을 받아들이고 14가 버퍼에 남아 있는 경우가 생길 수 있다. 따라서 여분의 문자들 1과 6은 stdin에 여전히 남아있게 된다

ex) scanf("%d",i) 입력시 29.00을 넣은 경우
  .00이 남아 있음..


해결책)따로 함수를 만드는 방법이 효과적

#include <stdio.h>

void clear_kb(void);

int main() {
        int age=0;
        char name[20];
        puts("Enter your age");
        scanf("%d",age);

        //stdin에 남아있는 여분의 문자를 청소한다.
        clear_kb();
        puts("Enter your first name.");
        scanf("%s",name);
        //데이터를 나타낸다.

        printf("your age is %d\n",age);
        printf("your name is %s\n",name);
        return 0;
}

void clear_kb(void) {
        char junk[80];
        gets(junk);
}

fflush(stdin) 으로도 가능

Posted by 몰라욧