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) 으로도 가능
'Language > C & C Plus' 카테고리의 다른 글
[C] 몇초간 정지 시키기 (0) | 2012.07.13 |
---|---|
[C] 포인터를 사용하여 다차원 배열을 함수에 전달하기 (0) | 2012.07.13 |
[C] 학생 개인성적 평균 구하는 프로그램(조건 까다로움) 2가지 버전 (0) | 2012.07.13 |
[C] 회원 도서 대출 관리 프로그램 (0) | 2012.07.13 |
[C] 버블 삽입 선택 퀵 Sort (0) | 2012.07.13 |