[C] scanf() 함수 사용시 주의 사항 및 처리 방법에 대하여
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) 으로도 가능